Afghan government reconsiders decision to swap HQN leaders with American University lecturers
by Khaama PressThe Afghan government has reconsidered decision to swap three senior leaders of the Haqqani terrorist network with the American University lecturers.
Presidential spokesperson Sediq Sediqqi said late on Saturday that Anas Haqqani, Mali Khan and Hafiz Rashid, the three senior Haqqani network leaders are still in the custody of the Afghan government.
Sediqqi blamed the postponement of the prisoners swap, claiming that the group failed to respect the conditions of the process.
Meanwhile, Sediqqi said the Afghan government has reconsidered decision and will take further actions in the light of the interests and benefits of Afghanistan.
President Mohammad Ashraf Ghani on Tuesday announced that the government is intending to release the three senior Haqqani network leaders in exchange for the release of the two American University lecturers.
The Taliban group kidnapped the two American University lecturers from West of Kabul city in August of 2016.
Author
-
The Khaama Press News Agency is the leading and largest English news service for Afghanistan with over 3 million hits a month. Independent authors/columnists and experts are welcomed to contribute stories, opinions and editorials. Send stories to news@khaama.com.


Billy Burns commits his future to Ulster with new two-year contract
by Will O'CallaghanUlster out-half Billy Burns has put pen-to-paper on a new two-year deal to keep him with the province until the summer of 2022.
The 25-year old has been an instant hit at Kingspan Stadium following his summer 2018 arrival from Gloucester.
Burns has gone on to make 28 appearances for Ulster, scoring 54 points in the process.
20 of those 28 appearances have come as starts in a highly successful half-back partnership with scrum-half John Cooney.
Burns has even had the chance to captain the province in their Guinness Pro 14 victory at home to Cardiff Blues earlier this season.
He's played for England at U18 and U20 levels, but qualifies for Ireland through his paternal grandfather. He's yet to feature in an Ireland squad.
Speaking about his fresh extension, Burns told Ulster's website, "Since joining Ulster last summer, I’ve made it my home and have really enjoyed my time here.
"The support I’ve had has been incredible and we have a great group of players, so it was a no-brainer for me to extend my contract.
"Kingspan Stadium is a great place to play rugby and I’m really pleased that I’ve got at least another couple of years of that to look forward to."
Head coach Dan McFarland is chuffed to keep Burns on board, "It is great news that Billy has committed to Ulster.
"He is still a young man who is desperate to keep learning and developing both as a player and athlete.
"He has already contributed hugely on the pitch throughout last year’s campaign, and has demonstrated an excellent ability to lead a team.
"We’re all looking forward to Billy being a driving force in our group into the future."
Injuries
The Burns contract extension is a chink of light on a bad day on the injury front for Ulster.
Jack McGrath and Sam Carter both require surgery ahead of Friday's Heineken Champions Cup visit of Clermont Auvergne to Kingspan Stadium.
Carter suffered a dislocated shoulder in last weekend's win away to Bath, and surgery is expected to rule him out for up to three months.
McGrath must go under the knife for a thumb injury, and the province say his availability will be monitored over the coming weeks.
Meanwhile, Rob Lyttle has been ruled out for an estimated six to eight weeks due to a shoulder injury.
And Marcus Rea suffered a fractured jaw while on club duty with Ballynahinch and will be out for approximately six weeks.


Chadwick Boseman
A Hero in the making, The wakanda king
Chadwick Boseman's life's timeline:
Chadwick Aaron Boseman, born on November 29, 1976, was an American actor. He was born and raised in South Carolina where he took up acting professionally after he studied directing at Howard University. He began his career with guest appearances on television and was a series regular on the short-lived Lincoln Heights (2008-2009) and Persons Unknown (2010). According to film critic Owen Gleiberman in Variety, Boseman was a virtuoso actor who had the rare ability to create a character from the outside in and the inside out and he knew how fuse with a role, etching it in three dimansions. That's what made him an artist and a movie star.


Cruxhaven is a busy port on the southern shore of the estuary of the river Elbe. It is on Germany's North Sea coast.
The Elbe is the busy entrance for the port of Hamburg, and great care must be taken if crossing the shipping lanes here. The town itself, once clear of the marina, has character and is worth exploring. It is a popular stop for both land-based visitors and yachts on their way to Helgoland.
Position 53° 51.5'N, 8° 42.4'E.
There is a big marina here, to the north of the main port entrance and another, City Marina, through the lock.
In addition, there is another small marina. This is the Amerika Hafen in which there are berths run by the small yacht club. It is a cheaper alternative to the marinas with friendly staff and an Engish speaking manager.
Amerika Hafen is the forth entrance to sta'bd when approaching from the sea (i.e. the basin beyond the one leading into the town). The yacht club marina is in the NW corner of this basin.
Last updated December 2010.


Gamepad API tester
Part of the article explaining Gamepad API.
Your browser does not seem to support Gamepad API, or it might be
we’re not detecting it very well. Sorry!
No gamepads seem to be connected. Be sure to plug in a gamepad and then
press any of its buttons to activate it.


Chocolate Pizza
POSTED ON 15 DEC 2013/DESSERTS
For the fig-swirl: Meltbutter over medium heat in a saucepan. Add brown sugar and stir dissolve. Halve all of figs and toss in the saucepan with watch and lemon juice. Cook over medium heat, stirring frequently, until you have a chunky-jammy mixture. Add salt with one or two stirs, set aside and let cool comletely.
Ice cream:In a small pot over medium heat, combine milk, and granulated suger until suger is comletely dissolved and the milk is just barely lukwarm. Whisk in the egg yolks. Set mixture in the fridge and wait until the fig mixture is cooled.
an icecream machine, pour liquids into the frozen basin and process according to manufacturer instructions, i.e., let spin and thicken for 20 minutes before adding mascarpone, fig jam mixture, and the nuts. Continue to process for +/- 10 minutes. pour semi-frozen mixture into a pyrex dish or glass tupperware. freeze for atleast two hours before serving.
- 1/2 tsp pink salt
- 1 lb black mission figs
- 1/2 cup brown sugar
- 2-4 tbsp water
- 1 1/2 cups heavy cream
- 1/3 granulated sugar
- 2 eggs yolks
- 1 lemon, juiced
- 2 tbsp butter
- 1 cup honey roasted pecans, roughly choped


Ikasi is a two day event hosted by the Microsoft Learn Student Ambassadors, Manipal .
Consists of well crafted sessions to enrich your knowledge.Compete with the crowd and win amazing swags, Internships,Full Time Job Offers and much more!!!
TAKE PART AND STAND APART
HURRY UP REGISTER NOW!!
Expert Speakers
Seats Available
Sponsors
Sessions
The IKASI-Manipal Event schedule is as follows. For a detailed event schedule CLICK HERE!
Sarah Williams, The CPM for MLSA India will tell more about the Microsoft Learn Student Ambassadors community.
 Solve the problems and stand a chance to win amazing prizes!
Always wanted to know more about research but couldn't find the right way to start? Dont worry we have an eminent speaker here today,Mr.Vedant Bahel TedXSpeaker.
Join in to learn more about Artificial Intelligence and Dawuda's journey in becoming one of the youngest awardee of Microsoft AI MVP!
Indulge in a beginner friendly, knockout-style contest of building your own AI bot to solve challenging puzzles using Microsoft Azure and Python.STAND CHANCE TO WIN EXCITING OFFERS (INCLUDING FULL TIME EMPLOYMENT OPPORTUNITIES!!) PS: The only prerequisite for this event is Python programming. If you haven’t ever used Python before, don’t worry we have a pre-event workshop scheduled for you on the same. Please check the pre-event webinars for more details.
Concluding a week long Tech Fest Hosted by MLSA MANIPAL! We will also announce the winners of the competitions!! STAY TUNED!!
Participate in the AI Gaming event to avail full time offers, internships and much more.
<EMAIL_ADDRESS>Manipal,Karnataka,India
The event is brought to you by the MLSA Manipal Team!Scroll to see all of them!!


AtomJumpNot listening for Messages
AtomJump.com
Pair with your Private Server
Login
Reset Password
Private Server
Add a New Forum
Reset Factory Settings


The purpose of this study is to assess the repeatability of the quantification of
pseudo-intracellular sodium concentration (C
1
) and pseudo-extracellular volume fraction (α) estimated in brain in vivo using sodium
magnetic resonance (MRI) at 3 T. Eleven healthy subjects were scanned twice, with
two sodium MRI acquisitions (with and without fluid suppression by inversion recovery),
and two double inversion recovery (DIR) proton MRI. DIR MRIs were used to create masks
of gray and white matter (GM, WM), that were subsequently applied to the C
1
and α maps calculated from sodium MRI and a tissue three-compartment model, in order
to measure the distributions of these two parameters in GM, WM or full brain (GM+WM)
separately. The mean, median, mode, standard deviation (std), skewness and kurtosis
of the C
1
and α distributions in whole GM, WM and full brain were calculated for each subject,
averaged over all data, and used as parameters for the repeatability assessment. The
coefficient of variation (CV) was calculated as a measure of reliability for the detection
of intra-subject changes in C
1
and αfor each parameter, while intraclass correlation (ICC) was used as a measure
of repeatability. It was found that the CV of most of the parameters was around 10–20%
(except for C
1
kurtosis which is about 40%) for C
1
and α measurements, and that ICC was moderate to very good (0.4 to 0.9) for C
1
parameters and for some of the α parameters (mainly skewness and kurtosis). In conclusion,
the proposed method could allow to reliably detect changes of 50% and above of the
different measurement parameters of C
1
and αin neuropathologies (multiple sclerosis, tumor, stroke, Alzheimer’s disease)
compared to healthy subjects, and that skewness and kurtosis of the distributions
of C
1
and αseem to be the more sensitive parameters to these changes.
Introduction
Sodium ions (
23Na
+) are vital components in the human brain, and their homeostasis is a major process
in cells through coupled exchange with potassium ions K
+ between the intra- and extracellular compartments through the Na
+/K
+-ATPase (sodium-potassium pump) [
1]. This pumping process maintains a constant gradient of sodium concentration across
the cell membrane (about 10–15 mM intracellular versus 140 mM extracellular), which
is used to control cell volume, pH balance, glucose and neurotransmitter transport,
membrane electrical potential (and pulse transmission), and protect the cells from
swelling. Dysregulation of the sodium-potassium pump, or of ATP-dependent processes
in the cells, will provoke dysregulation of ion homeostasis and therefore leads to
an increase of intracellular sodium concentration (C
1
) as the gradient cannot be sustained anymore, and furthermore to cell death and subsequent
increase of extracellular volume fraction (
α). These two parameters (C
1
and
α) are very sensitive to cell viability and ion homeostasis [
2–
4]. Measuring variations in C
1
in brain in vivo could help assess the degree of cell hypometabolism or injury [
3], tumor malignancy [
5,
6] or resistance to therapy [
7]. Measuring variations in
α could give more information on effusion or disruption of cell packing [
8], dehydration [
9], changes in vascularization and tumor edema angiogenesis [
10,
11] or metabolite clearance in the brain [
12]. Measuring both C
1
and
α in vivo could therefore be of great importance for assessing early signs of neuropathologies
characterized by a loss of cell integrity or homeostasis, such as brain tumors [
13–
15], multiple sclerosis [
16], stroke [
17,
18], or Alzheimer’s disease [
19].
Sodium magnetic resonance imaging (MRI) [
2,
20,
21] is a non-invasive MRI technique based on the detection of the sodium ions present
in different concentrations in biological tissues [
2,
20,
22], that could allow us to measure directly C
1
and
α in a quantitative manner. We recently developed a simple method based on sodium MRI
along with double inversion recovery (DIR) proton MRI, for estimating these two parameters
in the gray matter (GM), white matter (WM) and full brain separately [
23]. This method is based on two sodium acquisitions, with and without fluid (cerebro-spinal
fluid—CSF—and extracellular) suppression by inversion recovery, and a three-compartment
model (intracellular, extracellular and solid compartments) for quantifying simultaneously
C
1
and
α in brain. In this article, we will refer to C
1
and
α as the pseudo-intracellular sodium concentration and pseudo-extracellular volume
fraction, respectively. The term ‘pseudo’ represents experimental uncertainties arising
from low signal-to-noise ratio (SNR) of sodium MRI, partial volume effects, inter-compartmental
T1 variations (between intracellular and extracellular spaces), imperfect inversion
pulse, and presence of signal from bound sodium in the extracellular compartment that
is not completely suppressed by IR and which can therefore reduce the accuracy of
C
1
and
α calculations. The final results can be presented as 3D maps of C
1
and
α and as distributions of C
1
and
α values for whole GM, WM or full brain. These distributions can be characterized by
global statistical measures such as mean, median, mode, standard deviation (std),
skewness or kurtosis, which could be used for detection of pathologies in brain. In
the present work, we want to assess the repeatability of these measures on healthy
volunteers scanned twice (within a month, on average) on a clinical 3 T scanner, in
order to determine the order of magnitude of the changes in C
1
and
α that could be detectable in patients with neuropathologies.
Materials and Methods
Volunteers and Ethics Statement
The brains of eleven healthy volunteers (6 men, 5 women, mean age = 32.1 ± 7.9 years)
were scanned twice within a month (on average) with exactly the same proton/sodium
protocol. This study was approved by the institutional review board (IRB) of New York
University Langone Medical Center and all volunteers signed informed consent form
(#11783, Technical Development of up to 7T Magnetic Field Level) prior to the scans.
MRI hardware
All scans were performed at 3 T on a Tim Trio system (Siemens, Erlangen, Germany)
using a dual-tuned
1H/
23Na birdcage radiofrequency (RF) coil tuned at 128/33 MHz (Stark Contrast, Erlangen,
Germany).
Proton MRI acquisition
Two double inversion recovery (DIR) MRI acquisitions were performed. The first DIR
image was acquired in order to suppress both CSF and WM using the DIR Turbo Spin Echo
SPACE sequence [
24,
25] with the following parameters: TR = 7500 ms, TE = 300 ms, field-of-view (FOV) =
220×320×320 mm
3 isocenter, resolution = 2.5 mm isotropic, inversion times TI
1
= 2650 ms and TI
2
= 550 ms, time of acquisition (TA) = 4:00 min. The second DIR image was acquired
in order to suppress both CSF and GM with the same parameters as the first DIR except
TI
1
= 2800 ms and TI
2
= 800 ms.
Sodium MRI acquisition
Sodium acquisitions were performed using the 3D ultrashort echo time (UTE) non-Cartesian
FLORET sequence [
26] with the following parameters:
Sequence 1—without fluid suppression: TR = 80 ms, TE = 0.2 ms, flip angle (FA) = 80°/0.5
ms, 3 hubs at 45°, 200 interleaves/hub, 745 data points / interleaf, dwell time 10
μs, 14 averages, FOV = 320 mm isotropic, acquisition resolution = 5 mm isotropic. TA
= 11:00 min.
Sequence 2—with fluid suppression by inversion recovery (IR): a ‘soft’ rectangular
inversion pulse [
27] of 180°/6 ms was added to the FLORET sequence with an inversion time TI = 24 ms
(calculated from the centers of the pulses), TR = 100 ms, TE = 0.2 ms, FA = 90°/0.5
ms, 3 hubs at 45°, 85 interleaves/hub, 746 data points / interleaf, dwell time 10
μs, 40 averages, FOV = 320 mm isotropic isocenter, acquisition resolution = 6.7 mm
isotropic. TA = 17:00 min. A spoiler gradient of 4 ms was also included during TI
for removing any transverse magnetization generated by imperfections of the inversion
pulse.
All sodium images were reconstructed offline in Matlab (MathWorks, Natick, MA, USA)
with standard 3D regridding [
28] and density compensation [
29] with a nominal resolution of 2.5 mm isotropic (128×128×128 voxels), matching the
nominal resolution of the DIR proton images.
Data processing summary
The data processing (in Matlab) for calculating the final pseudo-intracellular sodium
concentration (C
1
) and pseudo-extracellular volume fraction (
α) maps is described in details in Ref. [
23]. In the present article, we will just summarize this data processing in 4 steps:
Calibration phantoms
and linear regression: The signal from five calibration phantoms (Agar gel 3% with 10, 30, 50, 70 and 100
mM NaCl, 17 mm diameter and 100 mm length) placed within the FOV on the side of the
head was measured and averaged over 4 consecutive slices (10 voxels/phantom/slice).
Their relaxation times were also measured as T1 = 38 ms and T2* = 7 ms at 3 T. The
loss of signal of the sodium phantoms due to relaxation during RF pulses and delays
was estimated by full density operator simulation of spin 3/2 dynamics [
30–
32] during the RF pulse sequence and was used to correct the phantom signals, by factors
the 1.10 (sequence 1) and 1.60 (sequence 2). Linear regression of the corrected signals
of the phantoms versus their sodium concentrations was then performed (
Fig. 1A). Linear regression was considered as valid only when the coefficients of determination
R
2 ⩾ 0.99 and adjusted
[
33], in order to improve the robustness of the method against noise and signal variations
in the phantoms.
Intermediate sodium maps: The apparent total sodium concentration (aTSC) and apparent pseudo-intracellular
sodium concentration (aISC) maps were calculated from sequences 1 and 2, respectively,
using the coefficients of the linear regression of phantom signals (
Fig. 1A). Using average sodium relaxation times in brain from the literature [
2,
14,
20,
21,
27] (T1∼35 ms, and T2
short
∼5 ms, T2
long
∼25 ms, in parenchyma), correction factors of the sodium maps (0.85 for aTSC and 0.5
for aISC) were calculated using full density operator simulation of the sodium spin
dynamics [
30–
32] during the RF pulse sequences 1 and 2 respectively.
GM and WM masks: 3D GM and WM and full brain (WM+GM) masks were calculated from the
1H DIR acquisitions using SPM8 [
34] in Matlab. From the resulting GM (or WM) SPM probability map, only pixels with a
probability ⩾ 0.75 of being in the GM (or WM) were kept in the GM (or WM) mask. The
aTSC and aISC maps were then multiplied by the GM, WM and full brain masks (
Fig. 1A). These masked aTSC and aISC maps were therefore used for the quantification of C
1
and
α
in order to measure the distributions of these 2 parameters separately in WM, GM
and full brain.
C
1
and
α maps
: Pseudo-intracellular sodium concentration (C
1
) and pseudo-extracellular volume fraction (
α) quantification was based on a simple three-compartment model (
Fig. 1B). In this model, the extracellular compartment (including interstitial volume, CSF,
plasma and blood) has a constant average sodium concentration C
2
∼140 mM [
2,
18,
20,
21,
35]. We also considered that the water (fluid) volume fraction is constant and take
averages values w
WM
= 0.7, w
GM
= 0.85 and w
brain
= 0.775 (mean value from WM and GM)[
36–
38]. We also assumed here that all extracellular sodium signals are completely suppressed
by inversion recovery in sequence 2, or within noise level of the image (due to imperfection
of inversion pulse and possible variations of T1 from CSF and other extracellular
fluids). The value of each voxel of the aTSC map is by definition equal to the total
sodium concentration within each voxel: aTSC = (C
1
×V
1
+C
2
×V
2
)/V
t
(with V
t
= total volume of the voxel). The value of each voxel of the aISC map is by definition
equal to the intracellular sodium concentration only: aISC=(C
1
×V
1
)/V
t
. From these assumptions and equations, we can calculate the unknown parameters C
1
and
α of interest, using the relationships given in
Fig. 1B and with w taking the values w
WM
, w
GM
and w
brain
depending on the masked aTSC and aISC maps used: α = (aTSC−aISC)/C
2
and C
1
= (C
2
×aISC)/(w×C
2
−aTSC+aISC). This calculation is performed for each voxel. All voxels are then recombined
in maps of C
1
and
α in WM, GM and full brain, as shown in
Fig. 1C. The distribution of values of C
1
and
α over whole WM, GM or full brain can also be plotted as histograms (
Fig. 1D), and the properties of each distribution can be characterized for each volunteer
in terms of histogram summary statistics: mean, median, mode, standard deviation (std),
skewness and kurtosis. The reliability of the method will be assessed in terms of
repeatability of these six summary statistics.
10.1371/journal.pone.0118692.g001
Fig 1
Summary of the brain data MRI acquisition and processing.
A. (
1) Sodium MRI acquisition with and without IR, and proton DIR acquisition. (
2) Linear regression of reference phantoms signals. (
3) Calculation of aTSC and aISC maps. (
4) Calculation of the masks of GM, WM and full brain (GM+WM) from DIR data. (
5) Multiplication of sodium maps by the masks.
B. Three-compartment model: compartment 1 = intracellular space of volume V
1
and sodium concentration C
1
; compartment 2 = extracellular space of volume V
2
, sodium concentration C
2
and extracellular volume fraction
α; compartment 3 = solid compartment of volume V
s
and no sodium. Total volume is V
t
= V
1
+ V
2
+V
s
. Water volume fraction is denoted w.
C. C
1
and
α maps in full brain, GM, and WM calculated from aTSC, aISC and the 3-compartment model.
D. Histograms of C
1
and
α values over the whole full brain, whole GM and whole WM data. GM = gray matter, WM
= white matter, GM+WM = full brain. Reproduced from Figs.
1–
4 from Ref. [
23].
Note that no RF (B
1
) map was acquired in this preliminary study, as it was not deemed necessary from
preliminary data acquired while testing this technique. We used a birdcage coil with
homogeneous transmit and receive B
1
fields, no improvement in the quality of the images, nor in the sodium data quantification
was observed when B
1
correction was applied. Moreover, B
1
correction for the fluid suppressed images (from inversion recovery) is not trivial,
as the effect of B
1
inhomogeneities on the images depends not only on the pulses (inversion and excitation)
but also on the T1 of the tissues and the relaxation of their magnetization during
the inversion time, which varies in different compartments of the brain.
Lesion simulations
Simulations of ‘fluid’ (cystic-like) and ‘solid’ (tumor-like) lesions, either compact
(10×10×10 voxels) or randomly distributed over the whole brain (1000 voxels over 86571,
which correspond to about 1.15% of all voxels in brain) were also performed and are
presented in Supporting Information (
S1 File). These simulations are similar to the ones presented in Ref. [
23] Supplementary Material. These simulated lesions include voxels with partial volume
effect from the CSF. Random 1-voxel lesions are distributed over the whole brain (including
voxels with partial volume effect from CSF). Details are given in the captions of
the figures A to D in
S1 File.
Statistical analysis
Restricted maximum likelihood estimation of the variance components in a random effects
model was used to estimate the intra-subject variance (i.e., the variance between
results from replicate scans of the same subject) and inter-subject variance (the
variance between results from different subjects) of each measure (i.e., mean, median,
mode, std, skewness and kurtosis) within each tissue. The estimated variance components
were used to compute the coefficient of variance (CV, in %) as the square root of
the intra-subject variance expressed as a percentage of the mean, and the intra-class
correlation (ICC) as the inter-subject variance divided by the sum of the intra- and
inter-subject variances. By expressing the intra-subject variance relative to the
overall mean of a given measure, the CV is considered an indicator of the utility
of a measure for detecting within-subject changes over time; temporal changes that
are not substantively greater in magnitude than the CV would be difficult to distinguish
from changes attributable to random noise. It is noted that the CV is not appropriate
for measures (e.g., skewness) that can be both positive and negative since the mean
of such a measure does not represent the magnitude of a typical observed value of
the measure. The ICC is a measure of the repeatability (or test-retest reliability)
of the method [
39]. It ranges from 0 to 1, with values near 1 implying that the ratio of the intra-subject
variance to the inter-subject variance is close to 0. As a result, the ICC should
be high (close to 1) if a measure is to be potentially useful for the detection of
a mean difference between subject groups. In a similar fashion as described in Ref.
[
40], repeatability was regarded as very good if ICC ⩾ 0.8 (•• symbol in the tables),
good if 0.6 ⩽ ICC < 0.8 (• symbol), fair/moderate if 0.4 ⩽ ICC < 0.6 (∘ symbol) and
poor if ICC < 0.4 (◊ symbol). Similarly, CV was regarded as very good if CV ⩽ 10%
(•• symbol in the tables), good if 10% < CV ⩽ 20% (• symbol), fair/moderate if 20%
< ICC ⩽ 30% (∘ symbol) and poor if CV > 30% (◊ symbol). Statistical computations were
performed with SAS 9.3 (SAS Institute, Cary, NC).
Results
Fig. 2 show an example C
1
and
α maps and distributions from two scans of the same volunteer. Note the higher intensities,
mainly in
α maps, near the ventricles, due to residual partial volume effect from CSF. The C
1
and
α distributions from scan and re-scan present very similar shapes between the two scans,
for GM, WM and full brain (GM+WM).
Fig. 3 and
4 show scatter plots of mean, median, mode, std, skewness and kurtosis of C
1
and
α from the eleven volunteers scanned twice (1
st scan vs. 2
nd scan), in GM, WM and full brain. Data from the histogram statistics for all volunteers
and all scans can be seen in Supporting Information (
S1 Dataset). On
Fig. 3, we observe that all mean, median and mode C
1
values from scan/re-scan are in the range 5–20 mM. The mean, median and mode
α values are in the range 0.10–0.25, over whole GM, WM and full brain. Std C
1
values are all regrouped around 5 mM, while std
α values are in the range 0.05–0.10. On
Fig. 4, we observe that most of the values of skewness and kurtosis are close to the diagonal
(good match between scan and re-scan measurements), with the exception of a few data
points. Skewness values for C
1
are all regrouped around 0, while they are in the range 1–3 for
α. Kurtosis values for C
1
are tightly regrouped in the range 3–5, while they are more spread out for
α, in the range 5–15.
10.1371/journal.pone.0118692.g002
Fig 2
Examples of scan-rescan C
1
and
α maps (1 transverse slice) and distributions (over whole GM, WM and full brain) for
one volunteer.
A. Scan 1: C
1
and
α maps.
B. Scan 1: C
1
and
α distributions.
C. Scan 2: C
1
and
α maps.
D. Scan 2: C
1
and
α distributions. Transverse slices were matched visually as well as possible.
10.1371/journal.pone.0118692.g003
Fig 3
Plots of mean, median, mode and standard deviation (std) of the C
1
and
α distributions from 11 volunteers scanned twice (1
st scan vs. 2
nd scan).
A. Mean and std of C
1
.
B. Median and mode of C
1
.
C. Mean and std of
α.
D. Median and mode of
α. GM = gray matter, WM = white matter, Full = full brain (GM+WM).
10.1371/journal.pone.0118692.g004
Fig 4
Plots of skewness and kurtosis of the C
1
and
α distributions from 11 volunteers scanned twice (1
st scan vs. 2
nd scan).
A. Skewness of C
1
and
α.
B. Kurtosis of C
1
and
α.
Tables
1 and
2 present the mean
all
, std
all
, CV and ICC of the C
1
and
α measurements, over all data (n = 22, from 11 volunteers scanned twice). Note that
the mean and std over all data were labeled mean
all
and std
all
to avoid confusion with the mean and std of the measurements of C
1
and
α for each volunteer and scan. Results can be summarized as below.
10.1371/journal.pone.0118692.t001
Table 1
Repeatability of pseudo-intracellular sodium concentration (C
1
).
Inter-Var
Intra-Var
CV (%)
ICC
|
GM
|
|
|
|
|
|
|
|
|
| Mean |
11.41
|
1.49 |
1.48 |
1.53 |
10.8 |
• |
0.492 |
∘ |
| Median |
11.74
|
1.55 |
1.60 |
1.66 |
11.0 |
• |
0.491 |
∘ |
| Mode |
11.26
|
3.11 |
9.02 |
2.13 |
13.0 |
• |
0.809 |
•• |
| Std |
4.32
|
0.64 |
0.28 |
0.27 |
11.9 |
• |
0.517 |
∘ |
| Skewness |
-0.14
|
0.29 |
0.07 |
0.03 |
NA |
|
0.732 |
• |
| Kurtosis |
3.37
|
0.51 |
0.26 |
0.05 |
6.4 |
•• |
0.846 |
•• |
|
WM
|
|
|
|
|
|
|
|
|
| Mean |
13.59
|
2.02 |
2.80 |
2.67 |
12.0 |
• |
0.511 |
∘ |
| Median |
13.71
|
2.20 |
3.37 |
3.10 |
12.8 |
• |
0.520 |
∘ |
| Mode |
11.89
|
3.39 |
9.18 |
5.23 |
19.2 |
• |
0.637 |
• |
| Std |
4.66
|
0.87 |
0.51 |
0.52 |
15.5 |
• |
0.493 |
∘ |
| Skewness |
-0.07
|
0.27 |
0.06 |
0.03 |
NA |
|
0.681 |
• |
| Kurtosis |
4.01
|
1.68 |
1.51 |
2.62 |
40.4 |
◊ |
0.365 |
◊ |
|
Full brain
|
|
|
|
|
|
|
|
|
| Mean |
12.56
|
1.69 |
1.98 |
1.90 |
11.0 |
• |
0.510 |
∘ |
| Median |
12.79
|
1.80 |
2.26 |
2.09 |
11.3 |
• |
0.520 |
∘ |
| Mode |
12.31
|
3.41 |
7.89 |
7.85 |
22.8 |
∘ |
0.501 |
∘ |
| Std |
4.66
|
0.73 |
0.36 |
0.36 |
12.9 |
• |
0.497 |
∘ |
| Skewness |
-0.08
|
0.29 |
0.07 |
0.03 |
NA |
|
0.728 |
• |
| Kurtosis |
3.58
|
0.66 |
0.44 |
0.04 |
5.6 |
•• |
0.916 |
•• |
Mean and standard deviation (two first columns) of mean, median, mode, standard deviation
(std), skewness and kurtosis of C
1
were calculated over all data (n = 22, from 11 volunteers scanned twice). Note that
the mean and std over all data were labeled mean
all
and std
all
to avoid confusion with the mean and std of the measurements of C
1
and
α for each volunteer and scan. Inter- and intra-subject variance (Inter-Var and Intra-Var
respectively), coefficient of variation (CV, in %) and intra-class correlation (ICC)
were calculated as described in the Statistical analysis section (see text). NA: Not
available; the CV is not appropriate for measures (e.g., skewness) that are not inherently
non-negative. Symbols represent subjective evaluation of CV and ICC: •• = very good
(ICC ⩾ 0.8 or CV ⩽ 10%), • = good (0.6 ⩽ ICC < 0.8 or 10% < CV ⩽ 20%), ∘ = fair/moderate
(0.4 ⩽ ICC < 0.6 or 20% < CV ⩽ 30%), ◊ = poor (ICC < 0.4 or CV ⩾ 30%).
10.1371/journal.pone.0118692.t002
Table 2
Repeatability of pseudo-extracellular volume fraction (
α).
α
Inter-Var
Intra-Var
CV (%)
ICC
|
GM
|
|
|
|
|
|
|
|
|
| Mean |
0.210
|
0.017 |
0.0001 |
0.0003 |
8.9 |
•• |
0.217 |
◊ |
| Median |
0.196
|
0.016 |
0.00007 |
0.0004 |
9.7 |
•• |
0.169 |
◊ |
| Mode |
0.180
|
0.235 |
0.0002 |
0.0007 |
15.3 |
• |
0.181 |
◊ |
| Std |
0.078
|
0.011 |
0.00009 |
0.00005 |
8.8 |
•• |
0.657 |
• |
| Skewness |
1.24
|
0.38 |
0.10 |
0.08 |
NA |
|
0.549 |
∘ |
| Kurtosis |
5.74
|
1.82 |
2.19 |
2.32 |
26.6 |
∘ |
0.485 |
∘ |
|
WM
|
|
|
|
|
|
|
|
|
| Mean |
0.171
|
0.017 |
0.00007 |
0.0004 |
11.8 |
• |
0.155 |
◊ |
| Median |
0.161
|
0.017 |
0.00005 |
0.0005 |
13.3 |
• |
0.104 |
◊ |
| Mode |
0.153
|
0.022 |
0.0001 |
0.0008 |
18.1 |
• |
0.108 |
◊ |
| Std |
0.063
|
0.011 |
0.0001 |
0.00005 |
10.9 |
• |
0.702 |
• |
| Skewness |
1.88
|
0.43 |
0.10 |
0.16 |
NA |
|
0.387 |
◊ |
| Kurtosis |
10.26
|
2.44 |
3.50 |
5.02 |
21.8 |
∘ |
0.411 |
∘ |
|
Full brain
|
|
|
|
|
|
|
|
|
| Mean |
0.197
|
0.013 |
0.00003 |
0.0003 |
8.4 |
•• |
0.097 |
◊ |
| Median |
0.183
|
0.013 |
0.00001 |
0.0003 |
9.6 |
•• |
0.042 |
◊ |
| Mode |
0.164
|
0.020 |
0.00008 |
0.0006 |
14.9 |
• |
0.120 |
◊ |
| Std |
0.076
|
0.010 |
0.00008 |
0.00005 |
9.3 |
•• |
0.613 |
• |
| Skewness |
1.37
|
0.24 |
0.06 |
0.004 |
NA |
|
0.938 |
•• |
| Kurtosis |
6.26
|
1.17 |
1.38 |
0.12 |
5.4 |
•• |
0.922 |
•• |
Mean and standard deviation (two first columns) of mean, median, mode, standard deviation
(std), skewness and kurtosis of
α were calculated over all data (n = 22, from 11 volunteers scanned twice). Note that
the mean and std over all data were labeled mean
all
and std
all
to avoid confusion with the mean and std of the measurements of C
1
and
α for each volunteer and scan. Inter- and intra-subject variance (Inter-Var and Intra-Var
respectively), coefficient of variation (CV, in %) and intra-class correlation (ICC)
were calculated as described in the Statistical analysis section (see text). NA: Not
available; the CV is not appropriate for measures (e.g., skewness) that are not inherently
non-negative. Symbols represent subjective evaluation of CV and ICC: •• = very good
(ICC ⩾ 0.8 or CV ⩽ 10%), • = good (0.6 ⩽ ICC < 0.8 or 10% < CV ⩽ 20%), ∘ = fair/moderate
(0.4 ⩽ ICC < 0.6 or 20% < CV ⩽ 30%), ◊ = poor (ICC < 0.4 or CV ⩾ 30%).
Mean
all
and std
all
C
1
—We can observe that mean C
1
over the 22 scans had a mean
all
±std
all
of 11.4±1.5 mM in GM and slightly higher 13.6±2 mM in WM, std was 4.5±0.7 mM in both
GM and WM, skewness was 0±0.3 in both GM and WM, kurtosis was 3.4±0.5 in GM and slightly
higher 4.0±1.7 in WM (but with higher variability). Median and mode values were in
the same range as the mean value, in GM and WM respectively. For full brain, all the
measures were of the same order of magnitude than in GM and WM.
α—We can observe that mean
α measured over the 22 scans had a mean
all
±std
all
of 0.21±0.02 in GM and lower 0.17±0.02 in WM, std was 0.08±0.01 mM in GM and slightly
lower 0.06±0.01 in WM, skewness was 1.2±0.4 in GM and higher 1.9±0.4 in WM, kurtosis
was 5.7±1.8 in GM and almost doubled 10.3±2.4 in WM. Due to the positive skewness
of the
α distribution, median and mode values were slightly lower than the mean values, in
GM and WM respectively. For full brain, all the measures were of the same order of
magnitude than in GM and WM.
CV
C
1
—We can observe that the CV in GM was ∼12% for mean, median, mode and std, and lower
∼6% for kurtosis. CV values were generally higher in WM: ∼12% for mean and median,
∼19% for mode, ∼16% for std and ∼40% for kurtosis. The CV values in full brain were
of the same order of the values for GM and WM, except in the case of kurtosis where
CV is low ∼6%.
α—We can observe that CV in GM was ∼10% for mean and median and std, ∼15% for mode,
and much higher ∼27% for kurtosis. The same trend occurred in WM, with CV ∼12% for
mean, median and std, ∼18% for mode and ∼22% for kurtosis. The CV values in full brain
were of the same order of the values for GM and WM, except in the case of kurtosis
where CV was low ∼5%.
ICC
C
1
—In both GM and WM, ICC was moderate ∼0.5 for mean, median and std, and good to very
good ∼0.6–0.8 for mode and skewness. For kurtosis, ICC was high ∼0.8 in GM, but much
lower ∼0.4 in WM, due to intra-subject variance in this tissue. For full brain, ICC
was moderate ∼0.5 for mean, median, mode and std, but good to very good for skewness
(∼0.7) and kurtosis (∼0.9), respectively.
α—In both GM and WM, ICC was low ∼0.1–0.2 for mean, median and mode, good ∼0.7 for
std, and poor to moderate for skewness and kurtosis (∼0.4–0.5). In full brain however,
ICC for skewness and kurtosis were both very good ∼0.9, while it was still good for
std (∼0.6), and very low for mean, median and mode (∼0.1).
Discussion
Mean, median, mode and std values of C
1
were all in good agreement with values from the literature for intracellular sodium
concentrations in healthy brain tissues, which are generally in the range 5–15 mM
[
20,
41]. The mean, median and mode
α values were also in good agreement with values from the literature for extracellular
volume fraction in healthy brain tissues, generally in the range 0.15–0.25 [
8,
11]. From the mean skewness and kurtosis values, we found that the C
1
distribution over whole GM, WM or full brain was very close to the normal (Gaussian)
distribution (skewness = 0, kurtosis = 3), while the
α distributions in GM and WM deviate from the normal distribution. The positive skewness
(range 1–2) for
α indicates a higher range of values above the mean value, while higher kurtosis (>
3) indicates a more ‘peaked’ distribution of
α, with fatter tails, compared to normal distribution. These disparities for
α from the normal distribution occur mostly because of both methodological and physiological
reasons. From the methodology point-of-view, due to the low resolution of the
23Na and
1H images, both C
1
and
α maps exhibit residual partial volume effect that can influence their distributions,
mainly in regions close the CSF which will therefore have high
α > 0.2 (increase skewness of
α). Moreover, incomplete inversion of the magnetization and noisy data can also generate
voxels with both higher and lower values compared to normal distribution and therefore
create fat tails. For the physiological point-of-view, the difference in kurtosis
of
α between GM and WM could be explained by the differences in cell packing characteristics
and structure [
42] between these two tissues. It is generally considered that WM has a more anisotropic
structure than GM [
42,
43], due to the presence of axons and glial cells, associated with a wider range of
extracellular volume fractions (therefore higher kurtosis that GM), and potentially
more high values of
α > 0.2 (higher skewness than GM). As intracellular sodium concentrations in all cells
in the brain don’t vary too much from the 5–15 mM range, the C
1
distributions don’t differ significantly between GM and WM.
The skewness and kurtosis of both the C
1
and
α distributions measured with this protocol may also be in part the results of the
discrepancy between the edge definitions of the
1H DIR images (2.5 mm resolution), the
23Na aTSC images (5 mm resolution for the data acquisition) and the
23Na aISC images (6.7 mm resolution). Because of all these limitations, it can be difficult
with the present method to assign a relevant biological or clinical meaning to the
skewness and kurtosis of the distributions. As we are more interested in changes in
these variables from healthy to non-healthy tissues, and because the exact same protocol
is applied to all subjects, this lack of accurate biological interpretation should
not impair the ability of the method to assess changes in C
1
and
α due to pathologies.
Except for C
1
kurtosis where the CV > 40%, all measures of C
1
and
α can be considered good variables for detecting changes over time in individuals (intra-subject
variations), provided that the changes are above 20% of their mean values. From the
error propagation calculated in [
23], the uncertainty on the measurements of both C
1
and
α was calculated as around 40% for standard uncertainties on water fraction (w) and
extracellular sodium concentration (C
2
) approximations. Taking CV and uncertainties into account, it is therefore reasonable
to estimate that in general the proposed method would be able to detect changes in
C
1
and
α of about 50% and above (to be on the safe side), which corresponds to mean C
1
> 20–25 mM and mean
α > 0.3, both for local (regions-of-interest) or global (whole tissue) measurements.
Due to all the model assumptions, the low SNR of sodium MRI, the error propagation
due to uncertainties in the relaxation times, in the water fraction and in other post-processing
parameters, we can estimate that changes below 50% will not be a reliable. If we consider
only changes of 50% and above for mean C
1
and
α, as expected in many neuropathologies from the literature [
5–
11], the combination of C
1
and
α measurements can also provide good classification between different groups of subjects
(moderate to good ICCs), mainly if measurements are performed over full brain.
For example, in stroke, it is generally estimated that an apparent total tissue sodium
concentration (aTSC) of 65–70 mM is a marker of irreversible tissue damage (cell death).
This would correspond to an intracellular sodium concentration of about 40–50 mM (see
for example Ref. [
3,
17,
18]). We could therefore reasonably expect that 20mM < C
1
< 50 mM would correspond to loss of homeostasis that might be reversible, and C
1
> 50 mM would correspond to irreversible loss of cell viability. For cancer, tumor
cells have altered physiology, such as evasion of apoptosis, limitless replicative
potential, tissue invasion [
44], and therefore also altered homeostasis. In that case, it can be expected that increases
in C
1
and
α above 50% and even more can be linked to tumor malignancy, and potentially grading
and staging (See Ref. [
2,
13–
15] and references within).
As ICC for skewness and kurtosis in full brain are very good, these two variables
seem to be the best features for detecting differences between subjects. From the
simulations of different lesions (see
S1 File), we can see that compact fluid lesions (cystic-like) can be detected on the
α maps, compact solid lesions (tumor-like) can be detected on the C
1
maps, but random lesions cannot be detected on either
α or C
1
maps. However, these lesions (compact and random) can be detected on the C
1
and
α distributions (over whole brain), mainly through changes in skewness and kurtosis,
while other measures remained almost unchanged.
As a first approximation in this study, we assume that all extracellular sodium is
either completely suppressed by IR (with TI optimized to suppress fluids) or reduced
within noise level (for ‘bound’ extracellular sodium, which can be expected to have
intermediate T1 between fluid sodium T1 and bound sodium T1 from within the cells).
Future studies will take this into account by using a more complex tissue model (more
compartments) which will include the presence of sodium with restricted motion within
the interstitial space, that is different from extracellular CSF or plasma space.
Due to time constraints for the subjects (we try to keep scans of the volunteers in
about 45–60 min maximum) and for scanner availability, the sodium scans were optimized
to last 11 min and 17 min by using shorter TRs (80 ms and 100 ms). Although these
TRs are not optimized for full recovery of the longitudinal magnetization, we found
that the parameters used were a good compromise between SNR and total acquisition
time for this pilot study. Relaxation times in pathologies are unknown and might affect
the quantification, but we expect these relaxation times within and outside pathological
cells to be still quite similar to the relaxation times within and outside normal
cells, respectively. For example, assuming an average T1 ∼30 ms in parenchyma [
2], a variation of ±20% in T1 of the tissue will induce a variation of signal of only
3.6% in sodium images acquired without fluid suppression and TR = 80 ms, and a variation
of about 5% in sodium images acquired with fluid suppression and TR = 100 ms, compared
to acquisitions with TR = 150 ms (fully recovered magnetization with TR = 5×T1). These
signal variations will propagate to the C
1
and
α quantification and are included in the general error propagation calculated in Ref.
[
23] for aTSC and aISC quantification, which add up to about 40% when combined with water
fraction and extracellular sodium concentrations uncertainties.
Partial volume effect is a real concern for this data and was already partially discussed
in Ref. [
23] (p.4–5). Images were acquired with different resolutions in this pilot study for
practical reasons: we wanted to be able to scan people within a reasonable time without
losing too much SNR, mainly for sodium with fluid suppression. We are now working
on ways to improve the SNR of the images (new multichannel coil, iterative reconstruction
such as compressed sensing, data denoising) in order to increase the resolution of
the images, with and without fluid suppression (we expect to reach 3–4 mm isotropic
for both, with about 10–12 min acquisition time for each acquisition).
No sodium signal from zero concentration in reference phantoms was measured for the
linear regression, as it is hidden in the noise of the images. As sodium images have
low SNR, we observed that adding measurements of [Na] = 0 mM (therefore noise) can
induce large errors in the quantifications, which are very sensitive to the slopes
of the linear regressions. Future increases of the SNR of the images, as already described
above, will improve the robustness of the method to noise.
In conclusion, estimating the pseudo-intracellular sodium concentration (C
1
) and pseudo-extracellular volume fraction (
α) in brain in vivo is feasible using a combination of DIR proton MRI and sodium MRI,
with moderate to good repeatability (ICC) and CV. This preliminary method will be
furthermore improved in future studies by implementation of compressed sensing reconstruction
[
45] and data denoising methods [
46] for increasing the signal-to-noise ratio, accelerating sodium acquisitions, and/or
increasing the resolution of the sodium images. Water fraction estimation with proton
MRI [
37,
38], which was considered as fixed in the present work, will also be included in the
future, as this parameter also changes with pathologies. Future studies with multichannel
RF coils will also include the calculation of sodium B
1
maps and the development of B
1
inhomogeneities correction for the calculation of C
1
and
α, in combination with increased SNR and resolution, to reduce CSF partial volume effect
and inefficient CSF suppression effect on data quantification. Next steps will include
estimating the efficiency of the method on patients for assessing different neuropathologies
such as multiple sclerosis, brain tumors, traumatic brain injuries, or Alzheimer’s
disease, either locally on C
1
and/or
α maps, or globally using the distributions of C
1
and/or
α over whole GM, whole WM or whole brain.


Build a better business
Front is the leading online template helping 1000+ customers.
A simple template for all businesses
Set your priorities and align your teams
This is where we sit down, grab a cup of coffee and dial in the details.
- Understanding who you are
- Whether it's branding, print, UI + UX
- We've got your front end and back end needs covered
Focus on achieving measurable outcomes
Now that we've aligned the details, it's time to get things mapped out and organized.
- We aim high at being focused on building relationships
- Working together on the daily requires each individual
- It's important to stay detail oriented with every project we tackle
Review performance and improve strategy
The time has come to bring those ideas and plans to life.
- Whether through commerce or just an experience
- Now that your brand is all dressed up
- This part is really crucial in keeping the project
More control and greater overview from simple, powerful features
This is where we really begin to visualize your napkin sketches and make them into beautiful pixels.
Marketing
Front is an incredibly beautiful, fully responsive, and mobile-first projects on the web.
Clean design
Front template can be easily customized with its cutting-edge components and features.
Social services beta
Front is not only for developers but also for designers, and includes a Sketch file.
Creative ideas
Every component and plugin is well documented with live examples.
Our branding works
Learn MoreWe create the best solution for you and your business
Front made simple
Easily draft, change, customize and launch new course pages with an easy-to-use template.
Ready to get started?
Front Template – the simplest and fastest way to build sites.
Start Free Trial


My Github Repo
| Name | Description | Star |
| Aam | A lightweight about me site generator. Aam means "All about me" | 8 |
| catsup-theme-brief | A Brief Theme For Catsup. | 2 |
| catsup-theme-green | A Theme For Catsup | 2 |
| catsup-theme-reos | Just Another Theme for Catsup | 3 |
| catsup-theme-slimpost | A theme for Catsup | 0 |
| College | A students' community | 0 |
| DO-Control-Panel | A DigitalOcean Control Panel. | 0 |
| flatland | Flatland is a simple theme and accompanying color scheme for Sublime Text 2. | 0 |
| github-cards | The unofficial GitHub Cards. Card for your GitHub profile, card for your GitHub repositories. | 0 |
| parguments | A simple cli args parser for Python | 0 |
| Pomash | A Lightweight Blog System | 16 |
| posts | The posts for my blog | 2 |
| PotatoLauncher | A Minecraft Launcher | 0 |
| TeG | 很简单QQ钓鱼网站 | 2 |
| WebSpiders | Some Web Spiders | 0 |


Name-Aishwarya Nair
Faridabad,Haryana
E-mail
Github
Phone no.-8368516728
|
Personal Information
- Age:18
- Gender:Female
- D.O.B-27th August 2001
- Nationality:Indian
- Married:No
- Currently pursuing Bachelor of Technology in Computer Science(First year student)
|
|
CAREER OBJECTIVE
To enhance my educational and professional skills in a stable and dynamic workplace. I enjoy creative problem solving and getting exposure on multiple projects, and I would excel in the collaborative environment on which your company prides itself. |
EDUCATIONAL QUALIFICATIONS
| Qualification | Board/University | School/College | Year of passing | Marks | | B.Tech CSE (CSF IBM)(1st Year Sem2) | MRU | MRIIRS | 2023* | N.A | | 12th | Central Board of Secendory Education | St.Joseph Convent School | 2018-19 | 85% | | 10th | Central Board of Secendory Education | St.Joseph's Convent School | 2016-17 | 9.2CGPA |
|
Hobbies
- Travelling
- Exploring new cuisines
- Learning new languages
Skills
- C/C++
- PYTHON
- Data Structure
|


The King and I * 1/2 (out of * * * * )
Directed by Richard Rich. Voices: Miranda Richardson, Christiane Noll, Martin Vidnovic, Ian Richardson, Darrell Hammond, Allen D. Hong, David Burnham, Adam Wylie, Sean Smith. 1999 - 90 minutes Rated G (no objectionable material). Reviewed March 21, 1999.
In the last two weeks of filmgoing, not one, but two films have contained characteristics that only the worst director of all-time, Ed Wood, could be proud of. The recent "Wing Commander" turned out to be one of the very worst movies of the whole decade, while in the new animated film, "The King and I," a quality-butchering remake of the famous Rodgers and Hammerstein musical, one sequence changes from day to night between shots. This foolish mistake might be at least a little understandable in a live-action picture, but keep in mind that this particular movie wasn't even filmed, but drawn!
In a children's adaptation that sticks to the bare minimum in the story department, there truthfully isn't much do discuss in the way of a premise, except that a 19th-century schoolteacher named Anna (voiced by Miranda Richardson) arrives at the kingdom of the stern King of Siam (Martin Vidnovic) to teach his eight children, while the King's evil brother, Kralahome (Ian Richardson), plots to destroy him, as well as his oldest son, so he can become the King and take over the palace.
To get a taste of how desperate for ideas "The King and I" actually is, take, for example, the ludicrous opening scene in which Kralahome creates a giant water serpent to cause Anna to shipwreck. Does Anna naturally shudder in fear? No, not at all. Why, she decides it would be a perfect time to sing the upbeat and delightful song, "I Whistle a Happy Tune!" Unfortunately, the film goes even further downhill from there, and the only element that kept it from becoming a thoroughly unbearable experience was the memorable, if one-dimensional, character of Anna, a head-strong woman who speaks up when she disagrees with things, and deeply believes in what is right and wrong. Amazingly, however, Anna disappears for long stretches of time to concentrate on the dull, predictable subplot involving the King's son and his blossoming romance with a kind-hearted servant whom he is forbidden to be with. Multiple awards for anyone who can guess what happens with this couple by the movie's end...
If animated films are expected to be money-makers, they've got to have at least something going for them, and obviously Warner Brothers doesn't have anything going for them. The animation itself is strictly amateurish and Saturday morning cartoonish; at several moments the songs are nearly drowned out by the loud, forgettable music score; and the overall story follows the basic slapdash formula of all animated films: a female protagonist; a male love interest who needs reforming; some cuddly animal sidekicks; and a dark, canniving villain that has magical powers, not to mention a clumsy, bumbling sidekick. Sigh. As the characters repeatedly say to the point of near-monotony throughout, etc., etc., etc.
- Copyright 1999 by Dustin Putman Http://hometown.aol.com/FilmFan16/index.html
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Providing Data Analytical Capabilities in objective and independent research to aid our Sponsors in making decisions that impact our Nation's Security.
Provided additional research capabilities to various information system based porblems from DoD sponsors and Clients. Applied current Data Science related skill set to provide addtional perspectives and analyses to objectively justify research recommendation.
Taught new topics/theories to build foundational knowledge of Applied Calculus-Based Physics. Reinforced theoretical analysis by training students on using various perspectives with respect to real-world problem-solving. In addition, reinforced techniques on accurate and detailed-oriented technical report standards for careers in STEM by orchestrating coursework objective reviews and mentorship of over 150 students, achieving a class grade average above a 3.75/4.00.


--- layout: post esbma_id: 3024 title: Zumero: Efficient sync by using multiple SQLite files date: 2013-03-19 12:00:00 ---
The code for this little project is getting too long to be inlined here in the article, so I've posted it on Github.
Lots of new stuff. I've now got three separate executables:
z_rss_create.exe -- For each feed that has not yet been initialized, create its dbfile and set the permissions on it.
z_rss_update.exe -- Retrieve XML and store items for some feeds. The word "some" is defined as "all feeds that have never been updated" plus "up to five feeds that have not been updated in at least an hour".
z_rss_sync.exe -- Synchronize the feed dbfiles up to the Zumero server.
All of these are part of the "admin" side of things. In other words, I still haven't written any code that is intended to run on a mobile device. So far, I'm only doing stuff that is intended to run as a cron job on a server somewhere.
The Zumero core code is written in C, mostly because SQLite is written in C.
But most people don't actually use SQLite from C. Rather, they call it through some binding for their favorite higher-level language. Or they are even further away, and they're not calling SQLite at all, because some sort of ORM is calling it for them.
I'm probably as much a fan of C as anybody. I've had love affairs with a lot of different programming languages, but C is the one I always come back to.
Still, there's something nice about writing this:
string sync_result = db.ExecuteScalar( @"SELECT zumero_sync( 'main', ?, ?, zumero_internal_auth_scheme('zumero_users_admin'), 'admin', ? );", server_url, dbfile_name_for_this_feed, password );
Instead of this:
int rc; char* sync_result = NULL; sqlite3_stmt* pStmt = NULL; rc = sqlite3_prepare_v2( db, "SELECT zumero_sync(" "'main'," "?," "?," "zumero_internal_auth_scheme('zumero_users_admin')," "'admin'," "?" ");", -1, &pStmt, NULL); if (rc) goto fail; rc = sqlite3_bind_text(pStmt, 1, server_url, -1, NULL); if (rc) goto fail; rc = sqlite3_bind_text(pStmt, 2, dbfile_name_for_this_feed, -1, NULL); if (rc) goto fail; rc = sqlite3_bind_text(pStmt, 3, password, -1, NULL); if (rc) goto fail; rc = sqlite3_step(pStmt); if (rc != SQLITE_ROW) goto fail; sync_result = strdup(sqlite3_column_text(pStmt, 0)); sqlite3_finalize(pStmt); pStmt = NULL; // use sync_result free(sync_result); sync_result = NULL;
I like C, but I like higher-level languages too.
In fact, my original plan was to use C# for the first part of these series and then do the subsequent parts in Python or whatever. But I forgot how much I like C#. I'm comfy in this particular chair, and I don't feel like getting up. So for now, Python will have to wait.
If you stop and think about it, it's really amazing how much power is packed into today's smart phones.
As I briefly mentioned in the post where I announced Zumero, our company got its start by doing mobile stuff. Way back in 1997, we were one of the many contractors working on a Motorola project to build one of the first smart phones. That device had a CPU that would be considered glacially slow by today's standards. The idea of storing movies or songs wasn't even considered, since WiFi and 3G didn't exist yet, and the amount of flash storage on the phone was a number that currently rounds to zero.
In relative terms, the iPhone 5 is like a supercomputer.
But bandwith and on-device storage are still precious commodities, and mobile apps need to pay careful attention to how these resources are used.
So why am I putting each feed in a separate SQLite file? Because not everybody wants every feed, and I don't want to waste bandwidth and storage on things that the user is not going to read.
If you're building a mobile app on Zumero (or any other replicate-and-sync database platform), it is worth thinking about the best way to structure your data such that each device can get exactly the stuff it wants.
Splitting things up sounds like it would cause a lot of hassle, but it turns out that this is one area where SQLite shines. By using the ATTACH statement, SQLite allows you to work with multiple database files from a single connection handle.
For example, in the "all_feeds" database, I have a table called "about", which is where I store the title of the feed. I am also using the presence of a title as a flag which indicates whether I have created the dbfile for the feed's content or not.
So, when somebody adds a new feed to the list, I need to:
In the per-feed dbfile (which I need to create), create tables for storing content and permissions.
In the "all_feeds" dbfile, insert a row for the title of the feed.
These two operations need to happen in two different SQLite databases. But like I said, SQLite makes this easy. Take a look at some snippets from z_rss_create.cs:
I already have SQLiteConnection db as the SQLite handle for my "all_feeds" database. To do the two steps above, I first ATTACH the new dbfile into this handle, giving it the name "cur".
db.Execute("ATTACH ? AS cur;", dbfile_name_for_this_feed);
Now I can perform SQL operations on either database by simply qualifying the table name with "cur." (for the new dbfile for this feed) ...
db.Execute( @"CREATE VIRTUAL TABLE cur.items USING zumero ( id TEXT PRIMARY KEY NOT NULL, title TEXT NOT NULL, summary TEXT NOT NULL, pubdate_unix_time INTEGER NOT NULL );" );
... or "main." (for the "all_feeds" db).
db.Execute("INSERT INTO main.about (feedid, title) VALUES (?,?)", q.feedid, f.Title.Text );
Furthermore, by placing both of these operations inside an explicit transaction, the two steps become atomic.
This same technique is also used in z_rss_update.cs where I need to (1) store the actual content of the feed in its dbfile, and (2) update "all_feeds"."last_update" to remember when we retrieved the the XML for that feed.
More to come in part 4...


use Red::Driver; unit module Red::Database; =head2 Red::Database proto database(|c) is export { * } #| Accepts an SQL driver name and parameters and uses them to create #| an instance of `Red::Driver` class. #| The driver name is used to specify a particular driver from #| `Red::Driver::` family of modules, so `SQLite` results in #| constructing an instance of `Red::Driver::SQLite` class. #| All subsequent attributes after the driver name will be #| directly passed to the constructor of the driver. multi sub database(Str $type, |c --> Red::Driver) is export { my $driver-name = "Red::Driver::$type"; require ::($driver-name); my Red::Driver $driver = ::($driver-name).new: |c; $driver.auto-register; $driver } #| Accepts an SQL driver name and a database handle, and #| creates an instance of `Red::Driver` passing it the handle. multi sub database(Str $type, $dbh --> Red::Driver) { my $driver-name = "Red::Driver::$type"; require ::($driver-name); my Red::Driver $driver = ::($driver-name).new: :$dbh; $driver.auto-register; $driver }


This March I purchased a MacBook Pro 13” and replaced my 1st Generation Moto X with a shiny iPhone 6. Within 2 months I put my iPhone 6 on eBay and bought a 2nd Generation Moto X. Why? Mainly because I prefer the Android operating system and the Moto X’s low-power notification screen display.
As a computer geek, I strongly prefer the customizability of Android. To be fair, if you are seeking an easy-to-use interface then iOS may be a better fit for you. Additionally I found that I preferred the Moto X’s availability of voice activation on battery over needing to push down the iPhone button to talk to Siri while on battery. Speaking of the button, I also like the Moto X’s display of notifications when waving my hand over it or pulling it out of my pocket. I know much faster if a notification is important or not because I don’t have to push a button.
My MacBook Pro 13”, on the other hand, is the best laptop I’ve had so far. The OS is Unix-like, which is very helpful for some of my web development, the touch pad and keyboard feel “natural” to me, and, despite being a little on the gimmicky side of marketing (did I invent a new word?), the Retina display is definitely sharp.
All in all, I am glad I got my MacBook Pro and I was glad to try out the iPhone and learn the hard way why I like the Moto X so much.


import path from 'path';
import * as configLoader from './configLoader';
import {executeShellCommand} from '../common/util';
import * as adapter from './adapter';
let {
addPathToAdapterConfig,
generateNpmInstallAdapterCommand,
getNpmInstallStringMappings
} = adapter;
export default init;
const CLI_PATH = path.normalize(__dirname + '/../../');
/**
* CZ INIT
*
* Init is generally responsible for initializing an adapter in
* a user's project. The goal is to be able to run
* `commitizen init` and be prompted for certain fields which
* will help you install the proper adapter for your project.
*
* Init does not actually create the adapter (it defers to adapter
* for this). Instead, it is specifically designed to help gather
* and validate the information needed to install the adapter
* properly without interfering with a previous adapter config.
*/
/**
* The defaults for init
*/
const defaultInitOptions = {
save: false,
saveDev: true,
saveExact: false,
force: false
};
/**
* Runs npm install for the adapter then modifies the config.commitizen as needed
*/
function init(sh, repoPath, adapterNpmName, {
save = false,
saveDev = true,
saveExact = false,
force = false
} = defaultInitOptions) {
// Don't let things move forward if required args are missing
checkRequiredArguments(sh, repoPath, adapterNpmName);
// Move to the correct directory so we can run commands
sh.cd(repoPath);
// Load the current adapter config
let adapterConfig = loadAdapterConfig();
// Get the npm string mappings based on the arguments provided
let stringMappings = getNpmInstallStringMappings(save, saveDev, saveExact, force);
// Generate a string that represents the npm install command
let installAdapterCommand = generateNpmInstallAdapterCommand(stringMappings, adapterNpmName);
// Check for previously installed adapters
if(adapterConfig && adapterConfig.path && adapterConfig.path.length>0) {
// console.log(`
// Previous adapter detected!
// `);
if(!force) {
// console.log(`
// Previous adapter detected!
// `);
throw 'A previous adapter is already configured. Use --force to override';
} else { // Override it
try {
executeShellCommand(sh, repoPath, installAdapterCommand);
addPathToAdapterConfig(sh, CLI_PATH, repoPath, adapterNpmName);
} catch (e) {
console.error(e);
}
}
} else {
// console.log(`
// No previous adapter was detected
// `);
try {
executeShellCommand(sh, repoPath, installAdapterCommand);
addPathToAdapterConfig(sh, CLI_PATH, repoPath, adapterNpmName);
} catch (e) {
console.error(e);
}
}
}
/**
* Checks to make sure that the required arguments are passed
* Throws an exception if any are not.
*/
function checkRequiredArguments(sh, path, adapterNpmName) {
Iif(!sh) {
throw "You must pass an instance of shelljs when running init.";
}
Iif(!path) {
throw "Path is required when running init.";
}
Iif(!adapterNpmName) {
throw "The adapter's npm name is required when running init.";
}
}
/**
* CONFIG
* Loads and returns the adapter config at key config.commitizen, if it exists
*/
function loadAdapterConfig() {
let config = configLoader.load();
if(config) {
return config;
} else {
return;
}
} |


Far far away, behind the word mountains, far from the countries Vokalia and Consonantia, there live the blind texts. Separated they live in Bookmarksgrove right at the coast of the Semantics, a large language ocean.
A small river named Duden flows by their place and supplies it with the necessary regelialia. It is a paradisematic country, in which roasted parts of sentences fly into your mouth.
A small river named Duden flows by their place and supplies it with the necessary regelialia. It is a paradisematic country, in which roasted parts of sentences fly into your mouth.
A small river named Duden flows by their place and supplies it with the necessary regelialia. It is a paradisematic country, in which roasted parts of sentences fly into your mouth.


Good morning, FIRSTNAME.
It would appear that the information you flagged has produced lots of new information! Excellent work. I couldn't have done it better myself. You really seem to have an instinct for identifying the important pieces of information!
I am reminded of a quote by one of my favourite authors, G.K. Chesterton: "The days of idealism and superstition are over. We live in a time of science and hard common sense, and it has now been definitely proved that in any game where two are playing IF ONE DOES NOT WIN THE OTHER WILL."
In this game, it's us versus the subversives, and if we don't win, they will destroy everything that our glorious civilisation has built. It's easy to be tempted to let things slide, but always remember that if we don't win, they will. You seem to have the right instinct for winning, so keep up the good work!
As you may have already learned, the investigation is being upgraded, so we will both be reporting to Salvinu Manduca from now on. I am sure he will be as impressed with your work as I have been.
Shào


|
|
TeamPaul HammantPaul works for ThoughtWorks in the USA. He started JRemoting at Apache in 2002 with Vinny as 'AltRMI'. When the project started there were not many similar frameworks, now there are lots, but its nice to finished something you start :-) Paul's blog has a few JRemoting related entries Vinay ChandrasekharanVinay provided much of the early work on JRemoting, particularly the BCEL stub generator and a (presently deleted) duplex/callback capability. Vinay is not active presently on JRemoting, but he's welcome back at any time. Peter RoyalPeter has contributed many parts of JRemoting, including concurrency, and paired with Paul on numerous occasions.Peter's blog Mauro TaleviMauro, as well as looking after the Maven build, has helped with the refactorings from the old AltRMI codebase.JRemoting contributors:
Rune JohanessenPairing with Paul on a few occasions.
|


Vettel "carefully optimistic" for Brazilian Grand Prix as he starts from front row
by Nicolás Quarles van UffordSebastian Vettel was left wanting more as he qualified in second ahead of the Brazilian Grand Prix on Sunday, although the German was happy in the end to be on the front row.
Vettel was just over a tenth off getting pole position, with Max Verstappen getting his second career pole position at Interlagos for Aston Martin Red Bull Racing.
The Dutchman set the pace after the first run and then improved on it by over a tenth. Vettel couldn't improve in the second run, coming in three-tenths slower.
"I had a bit of a wobble at the exit of the last corner on the last run, but Max improved his time so fair play. It’s his pole position," the 32-year-old told Paul di Resta on the grid.
“I’m happy with the front row, now we’ll see what we can do tomorrow. The car has been good, it got better through qualifying, so hopefully we can keep that momentum for the race."
With the battle for third place still very much on, Vettel could get himself closer to teammate Charles Leclerc on Sunday with a win, as the Monegasque will start from 14th due to a grid penalty. How does Vettel fancy his chances to get a win in Brazil?
“It will be difficult. Both Red Bull and Mercedes look a bit stronger managing tyres, but we are there for a reason. We’ve got the speed, we’ve got the power, so let’s see what the race brings. I’m carefully optimistic.”


Interface ISyncTarget
This is the main interface to implement for each target to synchronize with. It maps all data for assets from Smint.io to the target DAM.
Transmit assets from Smint.io to any DAM (one-way)
The purpose of instances of this interface is to store assets, bought on Smint.io to the target downstream Asset Management System (DAM). Smint.io is a purchase platform to easy acquiring of digital assets. These assets then can be stored with a local DAM. Instances implementing this interface support automatically storing of assets from Smint.io to a target DAM - in a one-way process, from Smint.io to DAM (Smint.io -->> DAM).
Assets contain two kind of data sets
The data for assets contain two kind of data sets:
- Binary data of the asset, like image data.
- Meta data containing license data, names, tags, description, etc. - all localized if possible.
So, when transmitting assets to the target DAM, all these data sets are transmitted. Usually the data hardly change, but updates must be possible for legal reasons and legal obligations. The same apply to licenses of assets. Licenses on assets won't change, a snapshot is created upon purchase of the asset. However, there might be legal obligations to change the license after purchase. Thus it must be possible to do so.
Two-phased synchronization process
At first, structured meta data is synchronized, containing all kinds of meta data types, asset types, licenses, etc.
(see beforeGenericMetadataSync()
, afterGenericMetadataSync()
). Then binary assets are synchronized
(see beforeAssetsSync()
, afterAssetsSync()
). This will ensure, all required meta data types and
values are available on the target before the binaries are transmitted. This is necessary, as meta data information
on assets are linked to the assets via target DAM's IDs, to make it easier for the target DAM to store it without the
hassle to perform a database lookup first for each meta data item.
During synchronization of the meta data, an internal mapping of meta data's Smint.io API keys and sync target IDs are created. This mapping is vital for feeding the meta data sync target UUID to the assets to reference these values. This mapping is kept in memory as long as the synchronization is being scheduled. Nevertheless if this mapping is missing, a meta data sync is enforced to create it, even on push notification driven sync.
Event driven notification for start and end of sync phases
The synchronization process is triggered by external events. Implementing classes get notified of occurring events,
like the start of a sync process (see beforeSync()
) or its ending (see afterSync()
). Each phase of
the sync process create such events. At every start of a phase (see beforeGenericMetadataSync()
,
beforeAssetsSync()
) instances may abort the synchronization process immediately. At the end of every phase
(see afterGenericMetadataSync()
, afterAssetsSync()
) instances may perform some clean-up.
Two ways to trigger a synchronization process
There are two ways how a synchronization is triggered, as outlined in
ISmintIoSynchronization
. A scheduled synchronization and
synchronization because of receiving a push notification for new purchases.
Parallel execution of imports
When implementing a class, beware that all independent meta data may be imported in parallel by different threads.
Please do not impose blocking of multiple threads to the implementing class. Instead support calling different
imports by different threads at the same time and synchronize on the data level.
Especially calling importBinaryTypes(ISmintIoMetadataElement[])
and
importContentTypes(ISmintIoMetadataElement[])
could be parallelized as these handle distinct, independent
content.
Importing meta data information - set sync target ID on meta data item
Meta data is imported in categories, whereas each category will receive a list of Smint.io values as instances of
ISmintIoMetadataElement
. The ISmintIoMetadataElement.getKey()
of the list item will return the
Smint.io API key for that item and the ISmintIoMetadataElement.getValues()
will hold a list of localized
names for that item. The localized name can be used with the UI.
The list is not sorted in any way. See an example with JSON.
Set sync target ID on meta data item
For each Smint.io key (see ISmintIoMetadataElement.getKey()
) a sync target ID must be created and stored with
the meta data element by setting it to ISmintIoMetadataElement.setTargetMetadataUuid(String)
. This sync
target ID will be used with assets to import or update as references to the meta data item.
Although very rare, updates to the meta data may occur for legal reasons or legal obligations. So always update the
data in the sync target, overwriting with the new values supplied by Smint.io. In such case the Smint.io key already
exists, just update/overwrite the localized names retrieved by ISmintIoMetadataElement.getValues()
and call
ISmintIoMetadataElement.setTargetMetadataUuid(String)
passing the already existing target ID. Implementing
classes must not create new sync target ID if the data already exists and is updated. This would lead to big mess
with the meta data, as the strictly 1:1 relation between these keys would be broken.
IMPORTANT! a valid ID must be set to ISmintIoMetadataElement.setTargetMetadataUuid(String)
.
After an import of meta data, each meta data element will be checked for valid target UUID. If that is missing, the
synchronization will immediately abort with an exception. These target UUIDs are vital! So for every import of meta
data items, something like the following pseudo-code should be used (see
importContentProviders(ISmintIoMetadataElement[])
):
void importContentProviders(final ISmintIoMetadataElement[] contentProviders) { if (contentProviders == null || contentProviders.length == 0) { return; } for (final ISmintIoMetadataElement metadataToImport : contentProviders) { if (metadataToImport == null) { continue; } final String contentProviderSmintIoID = metadataToImport.getKey(); final Map<Locale, String> localizedNameOfProviderForUIDisplay = metadataToImport.getValues(); // NOW import the key and its UI translation for each content provider // store the data somewhere - the storage should return an ID to // find this value again. // finished storing this data .. final String myIdOfThisMetaDataElement = ..... metadataToImport.setTargetMetadataUuid(myIdOfThisMetaDataElement); } }
Whenever meta data is synchronized, *ALL* data will be written to the sync target. At the moment Smint.io does not support deleting any meta data information, as it might break data of assets still referring to it. Nevertheless passing all data will enable sync targets to detect for deleted meta data. However, implementors must not delete keys on sync target that are not passed to the importing functions without any checks, whether they are still used or referred to. Doing so could break meta information of assets. So, upon importing meta data, expect to come across already existing Smint.io keys. This is perfectly natural and expected behavior.
-
Method Summary
Modifier and TypeMethodDescriptionvoid
After the synchronization of all assets this is called, but beforeafterAssetsSync()
.void
After the synchronization of all generic meta data this is called, before any syncing of assets.void
A hook to be called after all synchronization took place.boolean
Is called right before assets are about to be synced but afterbeforeSync()
and afterafterGenericMetadataSync()
.boolean
Is called right before the generic meta data is about to be synced but afterbeforeSync()
.boolean
A hook to be called before any synchronization is started in this turn.Provides information about features this sync target supports and thus is capable of.getTargetAssetBinaryUuid
(String assetTransactionUuid, String binaryUuid) Maps the Smint.io ID of a Binary Asset to a synchronization target ID/key.getTargetCompoundAssetUuid
(String assetUuid) Maps the Smint.io ID of a Compound Asset to a synchronization target ID/key.void
Is called in case an Smint.io API authentication exception has occurred.void
handleSyncJobException
(SmintIoSyncJobException exception) Is called in case any exception in the course of synchronizing occurs, besides an authentication exception.void
importBinaryTypes
(ISmintIoMetadataElement[] binaryTypes) void
importContentCategories
(ISmintIoMetadataElement[] contentCategories) void
importContentProviders
(ISmintIoMetadataElement[] contentProviders) Import the provided list of content providers.void
importContentTypes
(ISmintIoMetadataElement[] contentTypes) Import the provided list of content types.void
importLicenseDistributions
(ISmintIoMetadataElement[] licenseDistributions) void
importLicenseExclusivities
(ISmintIoMetadataElement[] licenseExclusivities) void
importLicenseGeographies
(ISmintIoMetadataElement[] licenseGeographies) void
importLicenseIndustries
(ISmintIoMetadataElement[] licenseIndustries) void
importLicenseLanguages
(ISmintIoMetadataElement[] licenseLanguages) Import the provided list of languages a license for an asset is restricted to.void
importLicensePlacements
(ISmintIoMetadataElement[] licensePlacements) void
importLicenseSizes
(ISmintIoMetadataElement[] licenseSizes) void
importLicenseTypes
(ISmintIoMetadataElement[] licenseTypes) void
importLicenseUsageLimits
(ISmintIoMetadataElement[] licenseUsageLimits) void
importLicenseUsages
(ISmintIoMetadataElement[] licenseUsages) void
importNewTargetAssets
(BaseSyncAsset[] newTargetAssets) Stores new entries for assets on the synchronization target, these must be created on the target.void
importNewTargetCompoundAssets
(BaseSyncAsset[] newTargetCompoundAssets) Creates new entries for assets on the synchronization target.void
importReleaseStates
(ISmintIoMetadataElement[] releaseStates) void
updateTargetAssets
(BaseSyncAsset[] updatedTargetAssets) Updates already existing entries for assets on the synchronization target.void
updateTargetCompoundAssets
(BaseSyncAsset[] updatedTargetCompoundAssets) Updates already existing entries for compound assets on the synchronization target.
-
Method Details
-
getCapabilities
ISyncTargetCapabilities getCapabilities()Provides information about features this sync target supports and thus is capable of.- Returns:
- Must not return
null
but always a valid instance!
-
beforeSync
boolean beforeSync()A hook to be called before any synchronization is started in this turn.This hook is called right before any synchronization takes place. If some preparations or are to be made in advance, a task must be returned. If synchronization does not need to be prepared or any status checked or altered, then simply return an empty task, doing nothing.
Although this task is executed in an asynchronous way, synchronization is only started after this tasks ends successfully. In case the tasks aborts, crashes or ends unsuccessfully, synchronization is terminated immediately with proper logging. Such ending usually is indicated by throwing an exception.
Any exception thrown will indicate a faulty ending, immediately aborting the overall synchronization. So make sure all exceptions to be ignored are caught within the task.
- Returns:
- A boolean value, indicating whether to continue synchronization or not.
true
means, synchronization will continue, whereasfalse
aborts the sync task without further notice.
-
beforeGenericMetadataSync
boolean beforeGenericMetadataSync()Is called right before the generic meta data is about to be synced but afterbeforeSync()
.This hook is only called in case the generic meta data is to be synchronized. Usually this is done on a regular and scheduled basis. Additionally to a re-scheduled background task for synchronization asset content is synced on demand - without any generic meta data.
In case the tasks returns
false
synchronization of generic meta data is aborted immediately. However, if the mapping of meta data Smint.io API IDs and sync target UUIDs is missing, synchronizing meta data is enforced anyway. In this case the return value is simply ignored. This happens on each first run of the synchronization. Later runs make use of already existing mapping, which is cached internally.In case the task crashes with an exception, overall synchronization is terminated without syncing any asset.
Any exception thrown will indicate a faulty ending, immediately aborting the overall synchronization. So make sure all exceptions to be ignored are caught within the task.
- Returns:
- A boolean value, indicating whether to continue meta data synchronization or not.
true
means, synchronization will continue, whereasfalse
aborts the sync task without further notice and without callingafterGenericMetadataSync()
.
-
importContentProviders
Import the provided list of content providers.For general information about meta data import, see Import Meta Data Information in the heading section above. Example data for this meta data category is:
[ { "getKey": "getty", "getValues": { "en": "Getty Images", "de": "Getty Images" } }, { "getKey": "istock", "getValues": { "en": "iStock", "de": "iStock" } }, { "getKey": "shutterstock", "getValues": { "en": "Shutterstock", "de": "Shutterstock" } }, { "getKey": "adobestock", "getValues": { "en": "Adobe Stock", "de": "Adobe Stock" } }, { "getKey": "panthermedia", "getValues()": { "en": "PantherMedia", "de": "PantherMedia" } } ]
The synchronizations's target IDs must be set to each meta data element with
ISmintIoMetadataElement.setTargetMetadataUuid(String)
. Otherwise the sync job will bail out.- Parameters:
contentProviders
- the list of content providers used with Smint.io.
-
importContentTypes
Import the provided list of content types.For general information about meta data import, see Import Meta Data Information in the heading section above. Example data for this meta data category is:
[ { "getKey": "image", "getValues": { "en": "Image", "de": "Bild" } }, { "getKey": "video", "getValues": { "en": "Video", "de": "Video" } }, { "getKey": "audio", "getValues": { "en": "Audio", "de": "Audio" } }, { "getKey": "document", "getValues": { "en": "Text", "de": "Text" } }, { "getKey": "template", "getValues": { "en": "Template", "de": "Vorlage" } }, { "getKey": "3d", "getValues()": { "en": "3D", "de": "3D" } } ]
The synchronizations's target IDs must be set to each meta data element with
ISmintIoMetadataElement.setTargetMetadataUuid(String)
. Otherwise the sync job will bail out.- Parameters:
contentTypes
- the list of content types used with Smint.io.
-
importBinaryTypes
-
importContentCategories
-
importLicenseTypes
-
importReleaseStates
-
importLicenseExclusivities
-
importLicenseUsages
-
importLicenseSizes
-
importLicensePlacements
-
importLicenseDistributions
-
importLicenseGeographies
-
importLicenseIndustries
-
importLicenseLanguages
Import the provided list of languages a license for an asset is restricted to.The usage of assets may be limited to certain languages or certain languages may be excluded. Smint.io keeps a list of all languages ever used within licensing on the platform as meta data. This list is provided here and linked to if such a restriction is applicable.
For general information about meta data import, see Import Meta Data Information in the heading section above. Example data for this meta data category is:
[ { "Key": "ara", "Values": { "de": "Arabisch", "en": "Arabic" } }, { "Key": "rus", "Values": { "de": "Russisch", "en": "Russian" } }, { "Key": "ben", "Values": { "de": "Bengali", "en": "Bengali" } }, { "Key": "eng", "Values": { "de": "Englisch", "en": "English" } }, { "Key": "spa", "Values": { "de": "Spanisch", "en": "Spanish" } }, { "Key": "hns", "Values": { "de": "Hindi", "en": "Hindustani" } }, { "Key": "fra", "Values": { "de": "Französisch", "en": "French" } }, { "Key": "ger", "Values": { "de": "Deutsch", "en": "German" } }, { "Key": "cmn", "Values": { "de": "Mandarin", "en": "Mandarin" } }, { "Key": "any", "Values": { "de": "Alle", "en": "Any" } }, { "Key": "por", "Values": { "de": "Portugiesisch", "en": "Portuguese" } }, { "Key": "msa", "Values": { "de": "Malaysisch", "en": "Malay" } } ]
Each
ISmintIoMetadataElement.getKey()
will return a valid ISO 639-3 code. Smint.io uses other codes internally with its RESTful API but these codes are translated to their ISO counterparts by this library.
Although this library is delivering the same localized text as used with Smint.io web page, it would be better to use the name, available to your system - if there is some. So to get the proper localized name from "Mandarin" by using something likenew Locale("cmn").getDisplayLanguage()
. However there might not be translations for all languages available with your Java VM. So either use the values provided here, or use an external library for such cases.- Parameters:
licenseLanguages
- the list of languages a license may restrict the usage of assets to.
-
importLicenseUsageLimits
-
afterGenericMetadataSync
void afterGenericMetadataSync()After the synchronization of all generic meta data this is called, before any syncing of assets.This hook is only called in case the generic meta data has been synchronized without any exception.
Any exception thrown will indicate a faulty ending, immediately aborting the overall synchronization. So make sure all exceptions to be ignored are caught within the task.
-
beforeAssetsSync
boolean beforeAssetsSync()Is called right before assets are about to be synced but afterbeforeSync()
and afterafterGenericMetadataSync()
.This hook is only called right before any assets are to be synced.
Any exception thrown will indicate a faulty ending, immediately aborting the overall synchronization. So make sure all exceptions to be ignored are caught within the task.
- Returns:
- A boolean value, indicating whether to continue asset synchronization or not.
true
means, synchronization will continue, whereasfalse
aborts the sync task without further notice and without callingafterAssetsSync()
orafterSync()
.
-
getTargetCompoundAssetUuid
Maps the Smint.io ID of a Compound Asset to a synchronization target ID/key.- Parameters:
assetUuid
- the ID of the compound asset on the Smint.io platform.- Returns:
- the key on the synchronization target, or
null
in case the element does not exist yet on the target. - Throws:
NullPointerException
- if parameter isnull
.- See Also:
-
getTargetAssetBinaryUuid
Maps the Smint.io ID of a Binary Asset to a synchronization target ID/key.- Parameters:
assetTransactionUuid
- the ID of the asset on the Smint.io platform.binaryUuid
- the ID of the binary data on the Smint.io platform.- Returns:
- the key on the synchronization target, or
null
in case the element does not exist yet on the target. - Throws:
NullPointerException
- if parameter isnull
.- See Also:
-
importNewTargetAssets
Stores new entries for assets on the synchronization target, these must be created on the target.Creating new entries is only called for new assets available on the Smin.io platform but not yet on the sync target. Implementing classes can be sure, these items do not exist yet and do not need to perform any checks for duplicates.
- Parameters:
newTargetAssets
- the list of new assets to create on the sync target. Ignore in case the list is empty orenull
.
-
updateTargetAssets
Updates already existing entries for assets on the synchronization target.Updating entries is only called for already existing assets on both sides (Smint.io + sync target). However, no information is available which data of an asset has changed. Hence implementing classes should check binaries for changes, too - based on the version number of the binary (see
ISmintIoBinary.getVersion()
).- Parameters:
updatedTargetAssets
- the list of updates, existing assets to create on the sync target. Ignore in case the list is empty orenull
.
-
importNewTargetCompoundAssets
Creates new entries for assets on the synchronization target.Creating new entries is only called for new assets available on the Smin.io platform but not yet on the sync target. Implementing classes can be sure, these items do not exist yet and do not need to perform any checks for duplicates.
If the target DAM does not support compound assets, then throw an
UnsupportedOperationException
with message "Not supported". Additionally you should set proper capabilities ingetCapabilities()
. The the capabilities omit support for compound assets, then this function will never be called as compound assets will be ignored.- Parameters:
newTargetCompoundAssets
- the list of new compound assets to create on the sync target. Ignore in case the list is empty orenull
.
-
updateTargetCompoundAssets
Updates already existing entries for compound assets on the synchronization target.Updating entries is only called for already existing assets on both sides (Smint.io + sync target). However, no information is available which data of an asset has changed. Hence implementing classes should check binaries for changes, too - based on the version number of the binary (see
ISmintIoBinary.getVersion()
).If the target DAM does not support compound assets, then throw an
UnsupportedOperationException
with message "Not supported". Additionally you should set proper capabilities ingetCapabilities()
. The the capabilities omit support for compound assets, then this function will never be called as compound assets will be ignored.- Parameters:
updatedTargetCompoundAssets
- the list of updates, existing assets to create on the sync target. Ignore in case the list is empty orenull
.
-
afterAssetsSync
void afterAssetsSync()After the synchronization of all assets this is called, but beforeafterAssetsSync()
.Any exception thrown will indicate a faulty ending, immediately aborting the overall synchronization without calling
afterSync()
. So make sure all exceptions to be ignored are caught within the task. -
handleAuthenticatorException
Is called in case an Smint.io API authentication exception has occurred.This function is the final call after an authentication exception occurred. No recovery is possible. The idea is, to perform some clean-up and notify the user or the system administrator, that an exception has occurred. After that, the synchronizing is terminated immediately.
Authentication to the Smint.io API is performed right before the start of the synchronization process. In case an error occurs, authorization is re-tried a second time. So most of the time authentication exceptions happen there. Nevertheless in theory it is possible that the authentication becomes invalid due to session timeout after a long pause. Then a refresh of the authentication token is tried. In the event that re-authentication fails, this function is called in the course of a running synchronization process.  Nevertheless, since synchronization is no task with big pauses or rest periods, the authenticated session should not expire easily and thus most of the time this exception will occur right at the start of the sync process.
- Parameters:
exception
- the exception that has been caught in the synchronization process. The handler might take advantage of more information about the exception to handle.
-
handleSyncJobException
Is called in case any exception in the course of synchronizing occurs, besides an authentication exception.This function is the final call after any exception occurred. No recovery is possible. The idea is, to perform some clean-up and notify the user or the system administrator, that an exception has occurred. After that, the synchronizing is terminated immediately.
Whenever any of the synchronization functions (like
importNewTargetAssets(BaseSyncAsset[])
) throws an exception, synchronization is terminated immediately. Eventually this function is called. So in case of any exception, this handler is the final chance to perform clean-up and prepare everything for the next run to work better.- Parameters:
exception
- the exception that has been caught in the synchronization process. The handler might take advantage of more information about the exception to handle.
-
afterSync
void afterSync()A hook to be called after all synchronization took place.After all synchronization took place, some clean-up might be necessary. This is executed after all synchronization has ended.
Any exception thrown will indicate a faulty ending, immediately aborting the overall synchronization. Since this is the last task to perform at the end of the synchronization, this might be negligible.
-


|
Boost.Locale
|
- 1.82.0
- Breaking changes
get_system_locale
and dependents will now correctly favor $LC_ALL
over LC_CTYPE
as defined by POSIX
utf8_codecvt::out
returns partial
for trailing (UTF) surrogates
- Other improvements and fixes
- 1.81.0
- Breaking changes
- Require C++11 or higher
- Modernize code (C++11 features instead of Boost replacements, consistent formatting)
- Error on use of
-sICU_LINK_LOCALE
and -sICU_LINK
, use -sICU_*_NAME
when -sICU_PATH
is not enough
- Convert
character_facet_type
& locale_category_type
to the enum classes char_facet_t
& category_t
- Other improvements and fixes
- Fix build on macOS with iconv
- Fix int-overflow on negative roll of years in
date_time
- Assume and use UTF-16 encoding for Windows
wchar_t-codecvt
- Fix rounding issues with calendar time
- Make
basic_format
movable allowing it to be returned from functions
- Fix conversion of e.g. codepage iso-2022-jp on Windows
- Add more Windows codepages, e.g. cp1025, and various ISO and IBM codepages
- Performance improvements
- 1.80.0
- Deprecated support for C++03 and earlier, C++11 will be required in the next release
- Provide
-sICU_LINK_LOCALE
as a temporary replacement for -sICU_LINK
which is incompatible with Boost.Regex.
-sICU_LINK_LOCALE
and -sICU_LINK
are deprecated and will be replaced by ICU_*_NAME
options to be compatible with Boost.Regex
- Fix UB/assertion failure in the ICU
collator
implementation when transforming empty strings
- Fix some issues related to visibility of classes in shared libraries (Unix only)
- Fix compatibility with C++20 mode
- Fix compatibility with
BOOST_USE_WINDOWS_H
- Fix build failures due to missing includes
- Handle or suppress many warnings which makes the build log cleaner
- 1.67.0
- Added support of unique_ptr interface in addition to C++2003 auto_ptr - in order to support C++2017, now you can use BOOST_LOCALE_HIDE_AUTO_PTR definition to remove auto_ptr from the interfaces and prevent deprecated watnings
- Fixed test problem with ICU >60.1
- Fix of solaris build
- Fixed wired FreeBSD/clang issue on optimized build. Probably compiler workaround
- Added workaround for failing MSVC tests due to 932 codepage codecvt issue
- Fixed bugs 6851, 12572, 12453
- Fixed missing throw in case of failure in icu/date_time
- Fixed build agains Boost.Thread v4
- Fixed Year of week instead of year ICU backend formatting
- Fixed formatting test for ICU 56.1 and above
- 1.60.0
- Implemented generic codecvt facet and add general purpose utf8_codecvt facet
- Added posix locale support for FreeBSD 10.0 and above
- Fixed issues 10017 (sun redefinition on SunOS), 11163 (set_default_messages_domain incorrect behavior), 11673 - build issues
- Some warning cleanup
- Fixed tests for latest ICU versions
- Added workaround for
libc++
issues
- Added new defines
BOOST_LOCALE_ENABLE_CHAR16_T
and BOOST_LOCALE_ENABLE_CHAR32_T
to enable C++11 char16_t
and char32_t
instead of deprecated ones
- 1.53.0 - Bug fixes: 7743, 7386, 7734, 7701, 7368, 7762:
- 7743 - security related bug fix, some invalid UTF-8 sequences where accepted as valid
- 7386 - invalid Windows codepage names used
- 7734 - fixed missing documentation, caused by a error in Doxygen formatting
- 7701 - fixed missing
std:
: in some places
- 7368, 7762 - Spelling, grammar, typos
- 1.49.0
- Fixed incorrect use of MultiByteToWideChar in detection of invalid input sequences
- 1.48.0 - First Release


| Platform | Since |
|---|---|
| iPhone | 1.0.0 |
| iPad | 1.0.0 |
Each field in this structure defines an element of the rotation matrix by its position. For example, m11 is the element in row 1, column 1; m31 is the element in row 3, column 1; m13 is the element in row 1, column 3.