--- layout: post title: "Decommissioning Decoraptors" description: "How to release objects from within a Decoraptor." date: 2014-08-25 10:08 UTC tags: [Software Design, Dependency Injection, Design Patterns] --- {% include JB/setup %}
{{ page.description }}
In my article about the Decoraptor design pattern, I deliberately ignored the question of decommissioning: what if the short-lived object created inside of the Decoraptor contains one or more disposable objects?
A Decoraptor creates instances of object graphs, and such object graphs may contain disposable objects. These disposable objects may be deeply buried inside of the object graph, and the root object itself may not implement IDisposable.
This is a know problem, and the solution is known as well: the object that composes the object graph is the only object with enough knowledge to dispose of any disposable objects within the object graph that it created, so an Abstract Factory should also be able to release objects again:
public interface IFactory<T> { T Create(); void Release(T item); }
This is similar to advice I've already given in conjunction with designing DI-Friendly frameworks.
With the new version of the IFactory<T> interface, you can refactor the Observeraptor class from the Decoraptor article:
public class Observeraptor<T> : IObserver<T> { private readonly IFactory<IObserver<T>> factory; public Observeraptor(IFactory<IObserver<T>> factory) { this.factory = factory; } public void OnCompleted() { var obs = this.factory.Create(); obs.OnCompleted(); this.factory.Release(obs); } public void OnError(Exception error) { var obs = this.factory.Create(); obs.OnError(error); this.factory.Release(obs); } public void OnNext(T value) { var obs = this.factory.Create(); obs.OnNext(value); this.factory.Release(obs); } }
As you can see, each method implementation now performs three steps:
Some people prefer letting the factory return something that implements IDisposable, so that the Decoraptor can employ a using
statement in order to manage the lifetime of the returned object. However, IObserver<T> itself doesn't derive from IDisposable, so if you want to do something like that, you'd need to invent some sort of Scope<T> class, which would implement IDisposable; that's another alternative.
Refactoring the Decoraptor itself to take decommissioning into account is fairly easy, but you also need to implement the Release method on any factory implementations. Furthermore, the factory should be thread-safe, because often, the entire point of introducing a Decoraptor in the first place is to deal with Services that aren't thread-safe.
Implementing a thread-safe Composer isn't too difficult, but certainly increases the complexity of it:
public class SqlMeterFactory : IFactory<IObserver<MeterRecord>> { private readonly ConcurrentDictionary<IObserver<MeterRecord>, MeteringContext> observers; public SqlMeterFactory() { this.observers = new ConcurrentDictionary<IObserver<MeterRecord>, MeteringContext>(); } public IObserver<MeterRecord> Create() { var ctx = new MeteringContext(); var obs = new SqlMeter(ctx); this.observers[obs] = ctx; return obs; } public void Release(IObserver<MeterRecord> item) { MeteringContext ctx; if (this.observers.TryRemove(item, out ctx)) ctx.Dispose(); } }
Fortunately, instead of having to handle the complexity of a thread-safe implementation, you can delegate that part to a ConcurrentDictionary.
The astute reader may have been wondering about this: shouldn't SqlMeter implement IDisposable? And if so, wouldn't it be easier to simply dispose of it directly, instead of having to deal with a dictionary of root objects as keys, and disposable objects as values?
The short answer is that, in this particular example, this would indeed have been a more correct, as well as a simpler, solution. Consider the SqlMeter class:
public class SqlMeter : IObserver<MeterRecord> { private readonly MeteringContext ctx; public SqlMeter(MeteringContext ctx) { this.ctx = ctx; } public void OnNext(MeterRecord value) { this.ctx.Records.Add(value); this.ctx.SaveChanges(); } public void OnCompleted() { } public void OnError(Exception error) { } }
Since SqlMeter has a class field of the type MeteringContext, and MeteringContext, via deriving from DbContext, is a disposable object, SqlMeter itself also ought to implement IDisposable.
Yes, indeed, it should, and the only reason I didn't do that was for the sake of the example. If SqlMeter had implemented IDisposable, you'd be tempted to implement SqlMeterFactory.Release by simply attempting to downcast the incoming item
from IObserver<MeterRecord> to IDisposable, and then, if the cast succeeds, invoke its Dispose method.
However, the only reason we know that SqlMeter ought to implement IDisposable is because it has a concrete dependency. Concrete types can implement IDisposable, but interfaces should not, since IDisposable is an implementation detail. (I do realize that some interfaces defined by the .NET Base Class Library derives from IDisposable, but I consider those Leaky Abstractions. As Nicholas Blumhardt put it: "an interface [...] generally shouldn't be disposable. There's no way for the one defining an interface to foresee all possible implementations of it - you can always come up with a disposable implementation of practically any interface.")
The point of this discussion is that as soon as a class has an abstract dependency (as opposed to a concrete dependency), the class may or may not be relying on something that is disposable. That's not enough to warrant the class itself to implement the IDisposable interface. For this reason, when an Abstract Factory creates an object graph, the root object of that graph should rarely implement IDisposable, and that's the reason it's not enough to attempt a downcast.
This was the reason that I intentionally didn't implement IDisposable on SqlMeter, even though I should have: to demonstrate how a Release method should deal with object graphs where the disposable objects are deeply buried as leaf nodes in the graph. A Release method may not always be able to traverse the graph, so this is the reason that the factory must also have the decommissioning responsibility: only the Composer knows what it composed, so only it knows how to safely dismantle the graph again.
Throwing IDisposable into the mix always makes things much more complicated, so if you can, try to implement your classes in such a way that they aren't disposable. This is often possible, but if you can't avoid it, you must add a Release method to your Abstract Factory and handle the additional complexity of decommissioning object graphs.
Some (but not all!) DI Containers already do this, so that may be one reason to use a DI Container.


Home
basic search engine
search engine with SVD
Max Search Engine
SVD Search
{% for best_match in best_matches %}
{{ best_match }}
{% endfor %}


This puzzle is the first of a series of 3. It focuses on a purely vertical landing, which can be reused for the other levels. You can solve this problem by simulating next turns to compute the lander speed when it reaches the ground (as I did in C). You can also solve it mathematically and reduce this algorithm to a simple comparison (as I did in Python and Java).
#include <stdlib.h> #include <stdio.h> int main(int argc, char** argv) { int N; scanf("%d\n", &N); int surfaceX[N]; int surfaceY[N]; for (int i = 0; i < N; i++) scanf("%d %d\n", &surfaceX[i], &surfaceY[i]); while (1) { int X, Y, dX, dY, fuel, rotate, power; scanf("%d %d %d %d %d %d %d", &X, &Y, &dX, &dY, &fuel, &rotate, &power); // Finds landing altitude by Looking for 2 consecutive points w/ same Y int groundY = -1; for (int i = 0; (i < N && groundY == -1); i++) if (surfaceX[i] <= X && X <= surfaceX[i+1]) groundY = surfaceY[i]; /* Finds out if it is safe to start braking only next turn, by simulating it and analyzing vertical speed at landing If it is safe, waits, else starts braking*/ double vdY = (double)dY; double vY = (double)Y; for (double i = 0.0; i <= 4; i++) { vdY += i - 3.711; vY += vdY; } while (vY > groundY && vdY < 0) { vdY += 0.289; // 4-3.711; vY += vdY; } printf((vdY >= 0 || vdY > -40.0) ? "0 0\n" : "0 4\n"); } return EXIT_SUCCESS; }
import java.util.*; import java.math.*; class Player { public static void main(String args[]) { Scanner in = new Scanner(System.in); int N = in.nextInt(); int[] surfaceX = new int[N]; int[] surfaceY = new int[N]; for (int i = 0; i < N; i++) { surfaceX[i] = in.nextInt(); surfaceY[i] = in.nextInt(); } while (true) { int X = in.nextInt(); int Y = in.nextInt(); int dX = in.nextInt(); int dY = in.nextInt(); in.nextInt(); in.nextInt(); in.nextInt(); // Finds landing altitude by Looking for 2 consecutive points w/ same Y int groundY = -1; for (int i = 0; (i < N && groundY == -1); i++) if (surfaceX[i] <= X && X <= surfaceX[i+1]) groundY = surfaceY[i]; /* Finds out if it is safe to start braking only next turn, by simulating it and analyzing vertical speed at landing If it is safe, waits, else starts braking*/ double vdY = dY - 8.555; double vY = Y - 36.665 + 5*dY; long t = Math.round((-40-vdY)/0.289); if (vY + t*(vdY+0.289*(1+t)/2) > groundY) System.out.println("0 0"); else System.out.println("0 4"); } } }
import math N = int(input()) surfaceX, surfaceY = [], [] for i in range(N): landX, landY = [int(j) for j in input().split()] surfaceX.append(landX) surfaceY.append(landY) while 1: X, Y, dX, dY, fuel, rotate, power = [int(i) for i in input().split()] # Finds landing altitude by Looking for 2 consecutive points w/ same Y groundY, i = -1, 0 while (i < N) and (groundY == -1): if (surfaceX[i] <= X) and (X <= surfaceX[i+1]): groundY = surfaceY[i] i+=1 # Finds out if it is safe to start braking only next turn, by # simulating it and analyzing vertical speed at landing # If it is safe, waits, else starts braking vdY , vY = dY-8.555, Y-36.665+5*dY; t = math.ceil((-40-vdY)/0.289); if (vY + t*(vdY+0.289*(1+t)/2) > groundY): print(0, 0) else: print(0, 4)


Bo mahe Simbegwire asebatimezi, naishondile hahulu. Bo ndatahe Simbegwire neba likile katata kubabalela mwanaa bona. Hanyinyani hanyinyani, nebaitutile kutaba hape kokusina bo mahe Simbegwire. Molipazulela, neba ina niku ambola kaza lizazi leo. Manzibwani neba lukisa za mulalelo hamoho. Kasamulao wa kutapisa mikeke, bo ndatahe Simbegwire neba mutusa kwa musebezi wa sikolo wa kwandu.
When Simbegwire’s mother died,
she was very sad. Simbegwire’s
father did his best to take care of
his daughter. Slowly, they learned
to feel happy again, without
Simbegwire’s mother.
Every morning they sat and talked
about the day ahead. Every evening
they made dinner together. After
they washed the dishes,
Simbegwire’s father helped her with
homework.
Lintu baanina Simbegwire baafwile, ali uwasakamana sana. Bawishi baaliesha namaka ukumona ukuti Simbegwire ali umutende. Panono panono, baasambilile ukuba abatemwa nakabili, ukwabula baanina Simbegwire. Cila lucelo baaleikala na ukulanda pa bushiku bwakuntanshi. Cila cungulo baalepekanya icakulya ca cungulo capamo. Panuma ya kusuka ifya kuulilapo, bawishi Simbegwire baaleafwa umwana imilimo ya kusukulu.
Zazi lelimu, bo ndatahe Simbegwire nebatile kakuliyeha hanyinyani kwa ndu kufita monebatelanga mazazi kaufela. “Ukai mwanake?” babiza. Simbegwire amatela bo ndatahe. Angangamana asaboni kuli basweli lizoho la musali. “Nibata kuli ukopane nimutu yomumu yaipitezi, mwanake. Ba kibo Anita, ” babulela inge bamenya.
One day, Simbegwire’s father came
home later than usual. “Where are
you my child?” he called.
Simbegwire ran to her father. She
stopped still when she saw that he
was holding a woman’s hand. “I
want you to meet someone special,
my child. This is Anita,” he said
smiling.
Ubushiku bumo, bawishi Simbegwire baaishile pa n’ganda munshita yabushiku ukucila inshiku sha kunuma. Baalitile abati, “ulikwisa we mwana wandi”? . Simbegwire abutukile kuli bawishi. Aliminine lintu amwene ukuti baawishi bekatilile umwanakashi pakuboko. “ndefwaya iwe wishibane no muntu umo umusuma, we mwana wandi. Uyu ni Anita,” baalandile mu kumwentula.
“Lumela Simbegwire, bo ndataho bani bulelezi zeng’ata zahao,” Bo Anita babulela. Kono neba sikamenya kapa kuswala lizoho la musizani. Bo ndatahe Simbegwire neba tabezi ni kunyakalala. Ba ambola za kupila hamoho kwa bona babalalu, ni bupilo bwabona mobukabela. “Mwanaka, nasepa ukalumela bo Anita sina bo maho.” babulela.
“Hello Simbegwire, your father told
me a lot about you,” said Anita. But
she did not smile or take the girl’s
hand.
Simbegwire’s father was happy and
excited. He talked about the three
of them living together, and how
good their life would be. “My child, I
hope you will accept Anita as your
mother,” he said.
Anita aalandile ati, “shani Simbegwire, bawiso baanjebele ifingi pali iwe,”. Koma Simbegwire taamwentwile nangu ukuposha uyu mwanakashi mu minwe. Bawishi Simbegwire baali abatemwa na insansa. Baalandile efyo bonse batatu bangekala pamo, na efyo imikalile yabo i ngaba iisuma. Baalandile “we mwana wandi, ndesubila walasumina Anita ukuba nga banoko,”.
Bupilo bwa Simbegwire bwa fetuha. Nasina nako yakuina ni bo ndatahe kakusanani. Bo Anita nebamufanga misebezi ya fa lapa ye ming’ata kuli nakatalanga hahulu kupalelwa ni kung’ola musebezi wa sikolo manzibwani. Nayanga kwa kulobala hasafeza feela kuca mulalelo. Sene simu ombaombanga feela neli kubo yamibalabala yene bamufile bo mahe. Bo ndatahe Simbegwire nebasika lemuha kuli mwanaa bona nasikatabela.
Simbegwire’s life changed. She no
longer had time to sit with her
father in the mornings. Anita gave
her so many household chores that
she was too tired to do her school
work in the evenings. She went
straight to bed after dinner.
Her only comfort was the colourful
blanket her mother gave her.
Simbegwire’s father did not seem to
notice that his daughter was
unhappy.
Ubwikashi bwa kwa Simbegwire bwacinjishe. Taakwete inshita yakuba nabawishi mu lucelo. Anita aalemupela incito sha pa n’ganda ishingi icalengele ukuti alefilwa uku kwata inshita ne milimo ya kusukulu mu cungulo neco aleenaka sana. Aile mukusendama panuma ya cakulya ca mu cungulo. Ubusumino bwakwe, bwali li langishi lya bulangeti bamupele banyina. Bawishi Simegwire calemoneka kwati tabaishibe kuti umwana wabo taali uwansansa.
Hase kufitile li kwelinyana, bo ndatahe Simbegwire baba bulelela kuli bakazwa fa ndu ka nakonyana.”Niswanela ku tama musipili wa musebezi,” babulela. “Kono naziba kuli mukaipabalela.” Simbegwire awisa sifateo kono bo ndatahe nebasika lemuha. Bo Anita nekusina sene babulezi kakuli nibona nesikatabela.
After a few months, Simbegwire’s
father told them that he would be
away from home for a while. “I have
to travel for my job,” he said. “But I
know you will look after each other.”
Simbegwire’s face fell, but her
father did not notice. Anita did not
say anything. She was not happy
either.
Panuma fye ya myeshi inono, bawishi Simbegwire balaile pa n’ganda ukuti balefumapo panshita inono.”mfwile ukuya kuncito,”baatile. Koma ninjishiba ukuti mwakulaikala fye bwino. Simbegwire aponya necinso panshi, nomba bawishi taabaishibe. Anita talandile nelyo cimo. Naena taatemenwe iyo.
Lika selitatafalela Simbegwire. Haiba asikafeza kueza misebezi yafa lapa, kapa kubilaela, bo Anita neba munata. Hape ka nako ya mulalelo, bo Anita neba canga zeng’ata, kusielanga Simbegwire bubulumusi bo bunyinyani. Busihu kaufela Simbegwire naitilelanga konji kulobala, ali kufumbatela kubo ya bo mahe.
Things got worse for Simbegwire. If
she didn’t finish her chores, or she
complained, Anita hit her. And at
dinner, the woman ate most of the
food, leaving Simbegwire with only
a few scraps.
Each night Simbegwire cried herself
to sleep, hugging her mother’s
blanket.
Ifintu kuli Simbegwire fyacilamo. Nga tapwishishe incito isha mu n’ganda, nangu ngailishanya, Anita aleemubola. Nga nipa cakulya ca cungulo, Anita aleelya ukucila ukushila Simbegwire utwakulya utunono. Cila bushiku nga bwaila, aleelila uku ninshi nafukatila no bulangeti bwa baanina.
Kakusasani omumwi, Simbegwire alobala singomba. “Wena kasizani ka kabuzwa!” Anita ahuwa. Sahowa Simbegwire fa mumbeta. Kubo yekateleha yaswala kwa mapo nikupazuha kueza liemba zepeli.
One morning, Simbegwire was late
getting out of bed.
Anita shouted. She pulled
Simbegwire out of bed. The
precious blanket caught on a nail,
and tore in two.
Ubushiku bumo ulucelo, Simbegwire alicelwa ukubuuka. “we mwanakashi wabunan’gani iwe!”Anita apaatile. Asuunkile Simbegwire ukumufunya pa busanshi. Ubulangeti bwaiketwe no musomali no ku bulepula mu bili.
Simbegwire nafilikanile hahulu mi aiketela kubaleha fa ndu. Ashimba tuemba twa kubo ya bo mahe ni lico zemu mi azwa aikela. Alatelela nzila yene bangile bo ndatahe.
Simbegwire was very upset. She
decided to run away from home.
She took the pieces of her mother’s
blanket, packed some food, and left
the house. She followed the road
her father had taken.
Simbegwire alifulwa sana. Atontonkenye ukubutuka ukufuma pa n’ganda. Aseendele utupimfya twa bulangeti bwa baanyina, ifyakulya afuma na pa n’ganda. Akoonkele umusebo kwaile bawishi.
Haseli manzibwani, apahama kota yetelele yeli kwa tuko ni kanukana ni kuipangela mumbeta mwa mitai. Hase alobala, aopela: “Ima, ima, ima, munisiile. Munisiile mi amusika kuta. Bo ndate abasanilata. Ima, mukuta lili? Munisiile.”
When it came to evening, she
climbed a tall tree near a stream
and made a bed for herself in the
branches.
As she went to sleep, she sang:
“Maama, maama, maama, you left
me.
You left me and never came back.
Father doesn’t love me anymore.
Mother, when are you coming back?
You left me.”
Lintu caishilefika icungulo, aniinine kucimuti icitali mupepi nakamana apanga no busanshi mu mabula. Cilya talapona mu tulo, aimbile: maama, maama, maama, mwalinsha ine. Mwalinsha ukwabula ukubwela. Taata tantemwa nakalya. Mayo nilisa muleisa? Mwalinsha ine.
Kakusanani kakatatami, Simbegwire aopela pina yeo hape. Basali habataha kuto tapisa libyana kwa kanukana, bautwa pina ya manyando yezwelela kwa kota yetelele. Banahana kuli mwendi ki moya wo nyanganyisa matali mi bazwelapili ni misebezi yabona. Kono musali alimumu kubona ateleza kwa pina katokomelo.
The next morning, Simbegwire sang
the song again. When the women
came to wash their clothes at the
stream, they heard the sad song
coming from the tall tree.
They thought it was only the wind
rustling the leaves, and carried on
with their work. But one of the
women listened very carefully to
the song.
Ubushiku bwa konkelepo ulucelo, Simbegwire aimbile ulwimbo nakabili. Lintu banamayo baaishile mu kucapa ifya ku fwala pa mumana, baumfwile ulwimbo lulefumina ku cimuti icitali mumano ukuti cali cipuupu caaletensha amabula, awe bakonkenyepo ne milimo yabo. Koma umo pali bena aumfwile ku lwimbo no bupilibulo.
Musali yo atalimisisa kwa kota. Abona musizani ni liemba za kubo ya mibalabala, alila, “Simbegwire, mwanaa kezelaka!” Basali babamu batuhela kutapisa batusa Simbegwire ku tuluka kwa kota. Bo ndatahe ba basali bafumbatela kasizani nikulika ku kaombaomba.
This woman looked up into the tree.
When she saw the girl and the
pieces of colourful blanket, she
cried, “Simbegwire, my brother’s
child!”
The other women stopped washing
and helped Simbegwire to climb
down from the tree. Her aunt
hugged the little girl and tried to
comfort her.
Uyu umwanakashi alooleshe kumulu wa cimuti. Lintu amwene cikashana na utupimfya twa bulangeti, aliila, “Simbegwire, umwana wa ndume yandi!” Banamayo bambi baalekele ukucapa na ukwafwa Simbegwire ukwikila panshi ukufuma ku cimuti. Baanina senge baafukatile umwipwa no kwesha uku mutalalika.
Bo ndatahe Simbegwire babasali baya niyena kwandu yabona. Bafa Simbegwire lico ze futumala ni kumu lobaza inge bamuapesize kubo ya bo mahe. Busihu bo, Simbegwire nalilile anaya mwa buloko. Kono neli mioko ya kulukuluha kakuli naziba kuli bo ndatahe babasali bata mubabalela.
Simbegwire’s aunt took the child to
her own house. She gave
Simbegwire warm food, and tucked
her in bed with her mother’s
blanket.
That night, Simbegwire cried as she
went to sleep. But they were tears
of relief. She knew her aunt would
look after her.
Baanyina senge Simbegwire baasendele Simbegwire ku n’ganda kumyabo. Baapele Simbegwire icakulya icakaba panuma, no ku mufimbilikisha pa busanshi no bulangeti bwa baanina. Bulya bushiku, Simbegwire aliilile lintu talalaala. Koma fyali filamba fya nsansa. Alishibe ukuti baanina senge balamusunga bwino.
Bo ndatahe Simbegwire aba kutile kwa ndu, batofumana musiyo wahae mukungulu. “Kuezahalile sikamani, Anita?” Babuza ka pilu ye bukiti. Musali muhulu atalusa kuli Simbegwire ubalehile. “Nenibata kuli anikuteke,” abulela. “Kono mwendi nenitatafalile hahulu.” Bo ndatahe Simbegwire bazwa fa ndu ni kulatelela nzila yeliba kwa kanukana. Baliba kwahae ya kezelaa bona kuyo buza haiba baboni Simbegwire.
When Simbegwire’s father returned
home, he found her room empty.
“What happened, Anita?” he asked
with a heavy heart. The woman
explained that Simbegwire had run
away. “I wanted her to respect me,”
she said. “But perhaps I was too
strict.”
Simbegwire’s father left the house
and went in the direction of the
stream. He continued to his sister’s
village to find out if she had seen
Simbegwire.
Lintu bawishi Simbegwire baabwelele ku n’ganda, baasangile ku muputule wakwa Simbegwire takuli nangu kamo. “ninshi yacitike, Anita?” baipwishe no mutima uwafina. Anita ekulondola ukuti Simbegwire alibutuka. Anita epakulanda ati “naalefwaya alempela umucinshi”. Nomba limbi caali cilamo.” Bawishi Simbegwire baafumine pa n’ganda no kulola ku mumana. Baapitile mpaka ku mushi waba nkashi yabo ukuya mu kwipusha nga cakuti baali mumonako Simbegwire.
Simbegwire nabapala ni likezeli zahae atobona bo ndatahe kwa hulenyana. Nasabile kuli mwendi baka nyema, konakuli amatela mwandu kuyoipata. Kono bo ndatahe baya kuyena mi babulela, “Simbegwire, uipumanezi bo maho bangana. Ba bakulata ni ku kuutwisisisa. Nitabezi mi nakulata.” Balumelelana kuli Simbegwire uta pila ni bo ndatahe babasali kuisa fa kalatela.
Simbegwire was playing with her
cousins when she saw her father
from far away. She was scared he
might be angry, so she ran inside
the house to hide.
But her father went to her and said,
“Simbegwire, you have found a
perfect mother for yourself. One
who loves you and understands
you. I am proud of you and I love
you.”
They agreed that Simbegwire would
stay with her aunt as long as she
wanted to.
Simbegwire aleeangala na bafyala bakwe lintu amwene bawishi pakatalamukila. Aaletina pali limbi nabakalipa, ici calengele ukuti abutukile mu n’ganda mukubelama. Nomba bawishi baile kuli ena na ukulanda ati “Simbegwire, walisanga banoko abapwililika. Banoko abakutemwa kabili abakwishiba efyo waba. Nga pali ici, ine ndi ngo watemwa kabili nalikutemwa. Baalisuminishanya ukuti Simbegwire akekala nabaanyina senge panshita akafwailapo umwine.
Bo ndatahe neba mupotelanga zazi ni zazi. Kufita nako yene batile ni bo Anita. Baswala lizoho la Simbegwire. “Uniswalele mwanana, nenifosize,” balila. “Wakona kunifa sibaka sakulika hape?” Simbegwire atalimela bo ndatahe ni pata yabona yeikalezwi. Cwale ataha fa pata hainyani hainyani nikuto potoloisa mazoho ahae ku bo Anita.
Her father visited her every day.
Eventually, he came with Anita. She
reached out for Simbegwire’s hand.
“I’m so sorry little one, I was
wrong,” she cried. “Will you let me
try again?”
Simbegwire looked at her father
and his worried face. Then she
stepped forward slowly and put her
arms around Anita.
Bawishi bale mutandalila cila bushiku. Mpaka pakulekelesha, baishile na Anita. Aikete Simbegwire pakuboko. “unjeleleko we mwana, nali luufyanya,”aliilile. Kuti wansuminisha ukuti njesheko nakabili?” Simbegwire aloleshe bawishi abali ne cinso ca bulanda. Simbegwire aatampwile panono panono ukulola kuli Anita na ukubika amaboko yakwe ukushunguluka Anita.
Sunda yetatama, bo Anita bamema Simbegwire ni likezeli zahae, ni bo ndatahe ba basali kwa ndu kuyoca. Neli malyalya! Bo Anita neba apehile kaufela lico zanalata Simbegwire mi batu kaufela neba cile konji kukula. Cwale banana babapala, babahulu inge baambola. Simbegwire naikutwile kutaba ni bundume. Saketa kuli, cwanong’u, ukakuta kwandu kuto pila ni bo ndatahe ni bo mahe bamutose.
The next week, Anita invited
Simbegwire, with her cousins and
aunt, to the house for a meal. What
a feast! Anita prepared all of
Simbegwire’s favourite foods, and
everyone ate until they were full.
Then the children played while the
adults talked.
Simbegwire felt happy and brave.
She decided that soon, very soon,
she would return home to live with
her father and her stepmother.
Umulungu wakonkelepo, Anita aitile Simbegwire muku mutandalila pamo naba fyala bakwe ukubikapo fye na baanyina senge wakwe. Cakulya ninishi ici! Anita apekenye fye ifya kukulya fya temwa Simbegwire na bonse baipakishe mpaka baikuta. Abaice balyangele elyo abakalamba balyashike. Simbegwire aumfwile insansa ne cilumba. Atontonkenye ukuti nombaline, nombaline sana, akabwelela ku n’ganda mu kwikala nabawishi na baanina bakusangamo.


Slide Links
The following are links to the slide presentations.
- Introduction To Programming Team
- String Manipulation
- Math
- Computational Geometry
- Combinatorics
- Data Structures
- Graph Theory
- Miscellaneous
Other Links
The following are other helpful links.


In order to avoid mistakes the software should be designed in such a way that new fuctionality is automatically protected by authentication.
Framework or server provided authentication should be used where possible while custom authentication should be avoided.
In Java EE application configurations it is possible to protect resources using URL regular expression patterns by defining a <security-constraint> in the web.xml file. When this approach is taken you should be careful to not place any sensitive resources outside the protected folders.
Another approach in Java EE is to use request filters which allow processing authentication on every single request.
When implementing an authentication filter everything should be authenticated by default and authentication logic should only be ignored on exception.
This will ensure that when a new resource is added it should benefit from authentication by default.
Example authentication filter
/** web.xml definition <filter-mapping> <filter-name>AuthenticationFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> */ public class AuthenticationFilter implements Filter { /* (non-Java-doc) * @see java.lang.Object#Object() */ public AuthenticationFilter() { super(); } /* (non-Java-doc) * @see javax.servlet.Filter#init(FilterConfig arg0) */ public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } /* (non-Java-doc) * @see javax.servlet.Filter#doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) */ public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { if (req instanceof HttpServletRequest){ HttpServletRequest request = (HttpServletRequest)req; if(isPublic(request)==false){ //isPublic runs the current request against a list of requests paths where authentication doesn't need to occur String authToken = (String) request.getSession().getAttribute("authToken"); //do some cookie validation here Cookie[] cookies = request.getCookies(); boolean loggedIn = false; if(cookies != null) { for (int i = 0; i < cookies.length; i++) { Cookie cookie=cookies[i]; String cookieName = cookie.getName(); String cookieValue = cookie.getValue(); if(cookieName.equals("authToken") && cookieValue.equals(authToken)) loggedIn = true; } } if (!loggedIn){ ((HttpServletResponse)resp).sendRedirect(request.getContextPath()+"/login.jsp"); return; } } } chain.doFilter(req, resp); } /* (non-Java-doc) * @see javax.servlet.Filter#destroy() */ public void destroy() { // TODO Auto-generated method stub } }
If neither of the options above can be implemented resources such as Servlet classes should inherit from an AuthenticatedServlet class which contains the authentication logic and executes it on every single request. This is more error prone but still better than performing authentication logic within the code for each individual resource.


| PostgreSQL 9.0.10 Documentation | ||||
|---|---|---|---|---|
| Prev | Up | Chapter 33. ECPG - Embedded SQL in C | Next |
To include an external file into your embedded SQL program, use:
EXEC SQL INCLUDE filename;
The embedded SQL preprocessor will look for a file named filename.h, preprocess it, and include it in the resulting C output. Thus, embedded SQL statements in the included file are handled correctly.
Note that this is not the same as:
#include <filename.h>
because this file would not be subject to SQL command preprocessing. Naturally, you can continue to use the C #include directive to include other header files.
Note: The include file name is case-sensitive, even though the rest of the EXEC SQL INCLUDE command follows the normal SQL case-sensitivity rules.
Similar to the directive #define that is known from C, embedded SQL has a similar concept:
EXEC SQL DEFINE name; EXEC SQL DEFINE name value;
So you can define a name:
EXEC SQL DEFINE HAVE_FEATURE;
And you can also define constants:
EXEC SQL DEFINE MYNUMBER 12; EXEC SQL DEFINE MYSTRING 'abc';
Use undef to remove a previous definition:
EXEC SQL UNDEF MYNUMBER;
Of course you can continue to use the C versions #define and #undef in your embedded SQL program. The difference is where your defined values get evaluated. If you use EXEC SQL DEFINE then the ecpg preprocessor evaluates the defines and substitutes the values. For example if you write:
EXEC SQL DEFINE MYNUMBER 12; ... EXEC SQL UPDATE Tbl SET col = MYNUMBER;
then ecpg will already do the substitution and your C compiler will never see any name or identifier MYNUMBER. Note that you cannot use #define for a constant that you are going to use in an embedded SQL query because in this case the embedded SQL precompiler is not able to see this declaration.
You can use the following directives to compile code sections conditionally:
Checks a name and processes subsequent lines if name has been created with EXEC SQL define name.
Checks a name and processes subsequent lines if name has not been created with EXEC SQL define name.
Starts processing an alternative section to a section introduced by either EXEC SQL ifdef name or EXEC SQL ifndef name.
Checks name and starts an alternative section if name has been created with EXEC SQL define name.
Ends an alternative section.
Example:
EXEC SQL ifndef TZVAR; EXEC SQL SET TIMEZONE TO 'GMT'; EXEC SQL elif TZNAME; EXEC SQL SET TIMEZONE TO TZNAME; EXEC SQL else; EXEC SQL SET TIMEZONE TO TZVAR; EXEC SQL endif;


I'm a DevOps Engineer at Lands' End in Madison, WI. I have serious passion for Microservices, Continuous Integration, Delivery and Deployment (CI/CD) and system automation
I have a solid experience with open source, high throughput, and highly-available environments. Gained extensive cloud and infrastructure experience, with multiple certifications from AWS
Here are a few technologies I've been working with recently:


In 30 Days
No.
Title
Company
Location
Publisher
Time
{{ x.id }}
{{ x.title || '(Unkown)' | limitWord: 38 }}
{{ x.company || '(Unkown)'}}
{{ x.location || '(Unkown)'}}
{{ x.publisher || '(Unkown)'}}
{{ x.publish_date || '(Unkown)'}}
无数据


{% extends "email/base/action.html" %}
{% load i18n %}
{% block subject_text %}{% blocktrans %}Verify your email address for {{ site_name }} account{% endblocktrans %}{% endblock %}
{% block action_title %}{% trans "Please confirm your email address by clicking the link below." %}{% endblock %}
{% block action_explanation %}{% trans "We may send you critical information regarding our services and your account with us. So we need to confirm the email address before we activate your account." %}{% endblock %}
{% block action_link %}{{ protocol }}://{{ domain }}/{{ url }}{% endblock %}
{% block action_button_text %}{% trans "Confirm Email Address" %}{% endblock %}
{% block action_ending_text %}{% trans "Thanks for creating an account with us." %}{% endblock %}


2 Kings 19:22
Whom hast thou reproached and blasphemed? and against whom hast thou exalted thy voice, and lifted up thine eyes on high? even against the Holy One of Israel.


4/20 email
Dear Faculty, Staff, and Students,
One of the highlights of the Spring semester at CSI has always been the Undergraduate Conference on Research, Scholarship, and Performance – for the past 18 years the Center for the Arts has been filled with the excitement of students and mentors sharing the extraordinary projects they have worked on together. While we cannot have an “in-person” conference this year, we’re delighted to let you know that arrangements for a virtual/online conference have moved ahead.
The virtual conference will take place on Thursday, April 30th 2020, the original conference date, and will run from approximately 12:30 – 4:30 pm with most presentations scheduled between 1:00pm and 4:00pm. There will be five tracks of presentations that will run concurrently on Zoom Webinar, with each student scheduled to give a live 3-4 minute summary, with 4 minutes for questions from attendees via the chat feature. There will be links for you to view posters in advance and to join sessions on the day of the conference.
Bear with us as we finalize the schedule of presentations and update the website where you’ll be able to find the schedule, program book, and links to the posters in advance of the conference - - we have approximately 100 submissions.
April 30th is fast approaching and we hope you can attend our first virtual Undergraduate conference and continue the tradition of celebrating the work of our students and their mentors.
Students, faculty, and staff are all invited to join the conference - save the date now!
Mel Pipe Associate Provost for Graduate Studies, Research, and Institutional Effectiveness


Test the oneVsRestClassifFit function
by comparing its results to liblinear's built in procedure. PMTKslow PMTKneedsOptimToolbox quadprog
Contents
requireOptimToolbox loadData('soy'); %C=3, N=307, D=35 setSeed(0); [X, Y] = shuffleRows(X, Y); Xtrain = X(1:250, :); ytrain = Y(1:250); Xtest = X(251:end,:); ytest = Y(251:end);
Fit using oneVsRestClassifFit as a wrapper to binary svm
fitfn = @(X, y)svmFit(X,y,'kernel', @kernelLinear,... 'fitFn', @svmQPclassifFit, 'standardizeX', false); predFn = @(model, X)argout(2, @svmQPclassifPredict, model, X); % use second arg, f as score model = oneVsRestClassifFit(Xtrain, ytrain, fitfn); yhat = oneVsRestClassifPredict(model, Xtest, predFn); nerrors = sum(yhat ~= ytest)
nerrors = 3
Compare the results to liblinear
model2 = svmFit(Xtrain, ytrain, 'kernel', 'linear',..., 'fitFn', @svmlibLinearFit, 'standardizeX', false); yhat2 = svmPredict(model2, Xtest); nerrors = sum(yhat ~= ytest)
nerrors = 3


--- title: 00_soft_dependcies keywords: fastai sidebar: home_sidebar summary: "Filterizer for checking what version we have installed (vision, tab, or text)" description: "Filterizer for checking what version we have installed (vision, tab, or text)" ---
This form of checking is heavily influenced by the mantisshrimp library


We have the conviction that we create the most innovative and reliable products on the market.
Contact us today for any questions you might have.
Rocket Elevators has won numerous awards and participated in many major projects.
AWARDS AND PROJECTSRocket Elevators offers a service for corporate buildings.
CORPORATIVE BUILDINGS"We go the extra mile... and the extra floors!"
Mathieu Houde"We love what we do!"
Daniela Grumbach KinderTell us about you
Address: 418-725 Boulevard Lebourgneuf, Québec, QC G2J 0C4, Canada Phone:<PHONE_NUMBER> Email: info@codeboxx.biz


Co-Connect House / Hugo Kohno Architect Associates
- Curated by María Francisca González
- about 3 hours
- version="1.0" encoding="UTF-8"? Architects: Hugo Kohno Architect Associates
- AreaArea of this architecture projectArea: 219.0 m2
- version="1.0" encoding="UTF-8"?YearCompletion year of this architecture project Year: 2019
- version="1.0" encoding="UTF-8"?PhotographsPhotographs: Seiichi Ohsawa
- version="1.0" encoding="UTF-8"?ManufacturersBrands with products used in this architecture project Manufacturers: Sprayed Lysine Finish
- Structural Engineer Scube Co., Ltd.
More Specs Less Specs
Text description provided by the architects. Residents of urban housing complexes can’t choose their neighbors. This project is an attempt to provide both connection and appropriate distance between the residents of a property that includes condos with long-term owners as well as rental units occupied by temporary tenants.
Each unit is comprised of interlinked boxy rooms. These units are strung together in a line with a passage-like “marginal courtyard” between each pair of volumes functioning to mediate between residents with different values and lifestyles. In addition, a series of small boxes are attached to each of the large boxes. The small boxes serve as bay windows, benches, counters, balconies, and small rooms, bringing southern light from the courtyards deep into every room. Offsetting the height and direction of these openings prevents neighbors from seeing into one another’s living spaces.
On the other hand, residents share the marginal courtyards. In addition, the design makes use of the elevation differential on the lot to create different levels in the architecture. This allows for the free linkage of spaces, with the two rental units interlocking three-dimensionally and both offering living spaces on the ground level, second floor, and south side. The boxes are tonally divided so that each time a resident moves from one box to another they cross from a white space into a grey one, creating a sensation of depth as they move between settings.
The boxes that make up urban living spaces tend to have standardized sizes and functions as well as uniform living spaces. However, altering the arrangement and connections between these boxes allows them to be responsive to the scale of the streetscape as well as the physical scale of their residents, as well as to adapt to a range of design and site conditions. This project thus presents a potential solution to the need for diverse living spaces, weaving together varied gathering points and linkages to reflect the urban space it is part of.


General Election 2019 statistics, Schedules and much more..
-
Loksabha Constituency Details
-
Constituency : {{selectedConstituency.Constituency}}
-
State / UT : {{selectedConstituency.State}}
-
Constituency Reservation Type : {{selectedConstituency.Type}}
-
Current MP : {{selectedConstituency.MP_2014}}
-
Current Party : {{selectedConstituency.Party_2014}}
-
Current MP Profile : Click to view
-
Politicians from {{selectedConstituency.Constituency}} : Click to view
-
Loksabha Election 2019 Schedule
-
{{Schedule.Announcement}} : Announcement & Issue of Press Note
-
{{Schedule.Notification}} : Issue of Notification
-
{{Schedule.Last_Date}} : Last Date for filing Nominations
-
{{Schedule.Scrutiny}} : Scrutiny of Nominations
-
{{Schedule.Last_Date_Withdrawal}} : Last date for withdrawal of
Candidature
-
{{Schedule.Poll}} : Date of Poll
-
{{Schedule.Counting}} : Counting of Votes on
-
{{Schedule.Completion}} : Deadline of Completion
-
{{StateData.State}} : Party-wise Seat Share
-
{{party.Name}} : {{party.Seats.length}}
-
{{StateData.State}} : Seat Reservation Stats
-
Total Seat Count : {{StateData.Total_Seat}}
-
GEN Seats Count : {{StateData.GEN_Seat}}
-
SC Seats Count : {{StateData.SC_Seat}}
-
ST Seats Count : {{StateData.ST_Seat}}
-
India : Party-wise Seat Share ({{LS_Party_Data.length}})
-
{{party.Party}} : {{party.Seats.length}}
-
India : UT/State-wise Seat Share ({{LS_State_Data.length}})
-
{{state.State}} : {{state.Seats.length}}
Please wait while data is being fetch from server..


How Are Physical And Mental Burnout Connected?
by QuoraI find that physical health definitely has an impact on burnout; not taking care of ourselves, burning the candle at both ends, not sleeping, eating badly, and not resting - these all contribute to the physical side of burnout. There’s also the mental/emotional side that I look at that has a huge impact on the physical, for example, not being nice to ourselves, negative self-talk, worrying, not giving ourselves a break, spending time with people who exhaust us and aren’t nourishing for our spirit, and giving too much without receiving — these will all also contribute to burnout.
While the physical aspect is big, the emotional (to me) is bigger, AND, I’ve found in my work that there are other things that can contribute to even more. I write about organizational burnout in Contagious Culture and the 7 factors that go with it. And in Contagious You (coming out 11/15/19), I’ve dug deeper going into personal burnout and what creates that.
In my work, I found the 7Ps of burnout - I’ll give you 4 here because I find that if we get conscious with these 4, it sets the others up well.
Disconnecting from the Presence and the Pause: Not giving ourselves time outs, not being present in the moment (constantly in the past or the future or multi-tasking), and not pausing to appreciate the moment, give ourselves 5 minutes between meetings (or thoughts), or take a minute between projects or big events in our lives.
Disconnecting from Purpose: Forgetting why we do what we do and who we do it for, what’s important about it for us, this is our WHY - it’s fuel. Forget your purpose, and what’s meaningful about what you’re doing, and things get exhausting fast.
Disconnecting from People: Forgetting the people that we’re actually serving and connected with and those we love and lead (and why) - as well as forgetting that we have people who love us, support us, and are here for us too. This is where connection and asking for help comes in. If we forget people, then what’s the point? We have more ways than ever to connect, and I notice we’re often also more isolated than ever. This P is crucial to well-being. (Notice that all Ps work together.)
Disconnecting from Pain, Pleasure, and Play: This is about allowing for full authentic emotion and allowing not only for our pleasure and play but also for our pain. If we override our emotions when we’re hurting, angry, in pain, etc. we’re not allowing ourselves our full experience of our humanness. I see it so often that a leader/human will override the fact that they’re hurt or angry, stifle it (often because they don’t think they can have it “as a leader,” ie. they have to show up “perfectly”), and then it either comes out later and gets projected on their team, or it manifests itself in something even bigger that may require even more support and have even more impact, or they get totally exhausted because they’re not getting the attention and care they need. OR all of the above. Bypassing our authentic emotions takes a lot of energy. We want to allow for all of ourselves and give ourselves the appropriate support and places to do so.
So those are 4 of the Ps… I find if you address one, the others seem to be affected as well. When we take care of ourselves physically and mentally and work our Ps we’re better armed and in partnership with ourselves to navigate the complexity of our lives and leadership.


Since this pavilion revolves around the Gupta Empire, it only fits that the establishments within it also correspond to the topic.
Will there be food?
Since food is a staple of any pavilion, there will be a booth serving food that was actually eaten by the residents of the Empire in times past. Information about the food served will be shown later on in the presentation.
Well, what else can you do here?
As for the other activities in the pavilion, we will have booths that explain the legacy and impact of the Gupta Empire to visitors of the Pavilion.
Click on the links in the navbar to find out about the Pavilion.
EPCOT Gupta Empire Pavilion Concept
EPCOT is a registered trademark of the Walt Disney Company.
This webpage is purely conceptual, and is not intended to represent or depict any actual event, person, or entity, and any such similarities are purely coincidental.


You're invited to celebrate siblings at the
Friday, April 6th at the 6:30 pm - 10:30 pmat the Center of Arts at the Armory
An entertaining evening of inspiration, philantrophy, and fun.


?seen
for
monograph
-U.Scholz
1977/78
t-lL>
FLORA
VON
SANTO
DOMINGO
Coll.
H.
von
Tiirckheim
New
York
Botanical
Garden
lb043G3
1604303
Legend -
Level of confidence that token is an accurately-transcribed word
extremely low
very low
low
undetermined
medium
high
very high


{% load static %}
This service provides the calculation of the shortest path. All that you need to do is:
Username: admin
Email<EMAIL_ADDRESS>Password: Superpass1234
The django admin dashboard can be accessed here
Username: guest
Password: guest
To explore the RabbitMQ message queues go to RabbitMQ management dashboard RabbitMQ message queues can also be explored via Flower
To start submitting locations for solving go to: {% url 'jobs:shortest-path-jobs-list' %}
You might want to login in the Django REST framework browsable API with the aforementioned superuser credentials in order to start taking advantage of the optimisation service.
In order to start testing the service, try inputting the following locations:
{ "locations": [ [10, 10], [10, 12], [100, 500], [22, 30] ] }
By default the route is calculated for 1 vehicle, starting from the first location.
After the job was created a background task is being launched to calculate your route and a pending job is returned:
{ "uuid": "fa163129-5a35-4dff-a714-b47ff4a698b5", "status": "pending", "result": "", "locations": [ [ 10, 10 ], [ 10, 12 ], [ 100, 500 ], [ 22, 30 ] ], "num_vehicles": 1, "starting_location": 0, "href": "http://localhost:8005/api/shortest-path-jobs/fa163129-5a35-4dff-a714-b47ff4a698b5/" }
After a while the task is completed and the result is persisted on the specific job database entry,
and by following the hyperlink for the job http://localhost:8005/api/shortest-path-jobs/*job UUID*
you will be able to see the result as such:
{ "uuid": "fa163129-5a35-4dff-a714-b47ff4a698b5", "status": "successful", "result": { "routes": [ { "route": [ [ 0, 0 ], [ 1, 2 ], [ 3, 21 ], [ 2, 476 ], [ 0, 498 ] ], "vehicle_index": 0, "total_distance": 997 } ], "indexed_locations": [ [ 0, [ 10, 10 ] ], [ 1, [ 10, 12 ] ], [ 2, [ 100, 500 ] ], [ 3, [ 22, 30 ] ] ], "starting_location": 0 }, "locations": [ [ 10, 10 ], [ 10, 12 ], [ 100, 500 ], [ 22, 30 ] ], "num_vehicles": 1, "starting_location": 0, "href": "http://localhost:8005/api/shortest-path-jobs/fa163129-5a35-4dff-a714-b47ff4a698b5/" }
Alternatively you could provide more options for configuring the:
{ "locations": [ [10, 10], [10, 12], [100, 500], [22, 30] ], "num_vehicles": 1, "starting_location": 0 }
Obviously the endpoint can be called from a client like Postman but first you need to
create an authorization token via Django Admin.
After a token was created just make sure to append the following header in your requests:
Authorization: Token *your token code*
Icons made by Freepik from www.flaticon.com


Register Below
First Name
Last Name
Email
Password
Country
Address
Birthday
Day
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Month
January
February
March
April
May
June
July
August
September
October
November
December
Year
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
I promise that I won't die of beauty!
Register
Go Back!


--- title: bookcrossing date: 2008-12-04 17:36:01.000000000 +02:00 categories: [] tags: [] status: draft type: post published: false meta: _edit_last: '600927' author: login: kouk email<EMAIL_ADDRESS>display_name: Konstantinos Koukopoulos first_name: '' last_name: '' excerpt: !ruby/object:Hpricot::Doc options: {} ---
http://groups.yahoo.com/group/bookcrossing-in-greece/
http://oneiros.gr/blog/2006/07/15/bcgreekconf1/
bookcrossing.com


Stratavision
Shop
(current)
About
Service
Team
Sign up
and save 20% on your first order!
×
New Collection
New Collection
New Collection
Previous
Next
Shop Collections
Glasses
See more
Sun Glasses
See more
Accessories
See more


Fornite makers sue Montreal game tester for allegedly leaking game elements
by The Canadian PressMONTREAL — The maker of the wildly popular game Fortnite is suing a Montreal video game tester for allegedly leaking a new online map ahead of its release date.
Epic Games International filed a statement of claim in Quebec Superior Court in late October against Lucas Johnston, alleging he was responsible for the publication of "highly confidential information" that amounted to a commercial secret.
The court document claims Johnston, then an employee of Keywords Studios in Montreal, took a screen shot of a new playing environment on Aug. 30, which later ended up on a Fortnite user forum more than a month before its scheduled Oct. 15 release.
The allegations against Johnston, who could not be reached for comment, have not been tested in court.
According to the documents, Johnston admitted taking the screen shot and emailing it to himself but said he didn't know how it ended up online.
The lawsuit claims the leak robbed the company of the element of surprise, tipped off its competitors to its strategy and affected its reputation among its peers.


Files CCore/inc/ScanBit.h CCore/src/ScanBit.cpp
ScanBit is a "bit-array" class, designed for the quick bit scanning. It stores a bit array in the internal buffer, packed in some unsigned integral units. Logically, it is the array of bits. The length is determined by the second template argument. The first argument is an Algorithm Package, it provides a set of functions for the efficient implementation of the ScanBit.
template <class Algo,ulen Len>
class ScanBit
{
using Unit = typename Algo::Unit ;
Unit bits[Len];
public:
static constexpr ulen IndexLim = Len*Algo::UnitBits ;
ScanBit();
void set(ulen ind);
void clear(ulen ind);
Unit test(ulen ind) const;
ulen findMin(ulen ind) const; // min>=ind , if( not found ) return IndexLim;
ulen findMax(ulen ind) const; // max<=ind , if( not found ) return IndexLim;
};
The default constructor clears all bits.
The inner constant IndexLim is the array bit length. The argument ind in all methods must be less than IndexLim.
set() sets the bit with the given index.
clear() clears the bit with the given index.
test() tests the bit with the given index. The return value is non-zero iff the bit is set.
findMin() scans bits starting form the given index up. The index of the first found set bit is returned. If there is no such one, IndexLim is returned. The efficiency of this method depends on the efficiency of the method Algo::ScanUp().
findMax() scans bits starting form the given index down. The index of the first found set bit is returned. If there is no such one, IndexLim is returned. The efficiency of this method depends on the efficiency of the method Algo::ScanDown().
Two prepared Algorithm Packages for the ScanBit are provided: ScanMSBitAlgo and ScanLSBitAlgo. They are built, based on "quick" functions, provided by the target. They use different order of numbering bits in the unit. They ScanUp/ScanDown() methods use the opposite Quick::ScanMSBit/ScanLSBit() function calls, as shown below.
struct ScanMSBitAlgo
{
using Unit = Quick::ScanUInt ;
static constexpr ulen UnitBits;
static constexpr Unit Unit_msb;
static constexpr Unit Unit_all;
static Unit Bit(ulen number);
static Unit MaskUp(ulen number);
static ulen ScanUp(Unit bit); // uses Quick::ScanMSBit()
static Unit MaskDown(ulen number);
static ulen ScanDown(Unit bit); // uses Quick::ScanLSBit()
};
struct ScanLSBitAlgo
{
using Unit = Quick::ScanUInt ;
static constexpr ulen UnitBits;
static constexpr Unit Unit_1;
static constexpr Unit Unit_all;
static Unit Bit(ulen number);
static Unit MaskUp(ulen number);
static ulen ScanUp(Unit bit); // uses Quick::ScanLSBit()
static Unit MaskDown(ulen number);
static ulen ScanDown(Unit bit); // uses Quick::ScanMSBit()
};


"I'm absolutely addicted to this game! If you like to build words then this is the game for you. I play for hours. Love it!"
Learn More"Wonderful game... difficult to stop playing the game... I give it more than a five!!!!"
Learn More"This game is so addictive and fun, I find myself unwilling to turn it off until I play 'one more game'. I love it!"
Learn More


BitRock Inc. (DBA “Bitnami”) provides KubeApps.com to you subject to the terms of use (“Site Terms”) outlined below. By visiting KubeApps.com, you accept the Site Terms.
Please review our Privacy Policy.
When you visit KubeApps.com or send e-mails to us, you are communicating with us electronically. You consent to receive communications from us electronically. We will communicate with you by e-mail or by posting notices on KubeApps.com. You agree that all agreements, notices, disclosures and other communications that we provide to you electronically satisfy any legal requirement that such communications be in writing.
All content included on KubeApps.com, such as text, graphics, logos, button icons, images, audio clips, digital downloads, data compilations, and software, is the property of Bitnami or its content suppliers and protected by United States and international copyright laws. The compilation of all content on KubeApps.com is the exclusive property of Bitnami and protected by U.S. and international copyright laws. All software used on KubeApps.com is the property of Bitnami or its software suppliers and protected by United States and international copyright.
TRADEMARKS
“Bitnami”, “BitRock”, and other Bitnami graphics, logos, page headers, button icons, scripts, and service names are trademarks, registered trademarks or trade dress of Bitnami in the U.S. and/or other countries. Bitnami’s trademarks and trade dress may not be used in connection with any product or service that is not Bitnami’s, in any manner that is likely to cause confusion among customers, or in any manner that disparages or discredits Bitnami. All other trademarks not owned by Bitnami that appear on this Site are the property of their respective owners, who may or may not be affiliated with, connected to, or sponsored by Bitnami.
Bitnami grants you a limited license to access and make personal use of KubeApps.com and not to download (other than page caching) or modify it, or any portion of it, except with express written consent of Bitnami. This license does not include any resale or commercial use of KubeApps.com or its contents; any derivative use of KubeApps.com or its contents; any downloading or copying of account information; or any use of data mining, robots, or similar data gathering and extraction tools. Unless otherwise specified by Bitnami in a separate license, your right to use any software, data, documentation or other materials that you access or download through KubeApps.com is subject to these Site Terms or, if you have a Bitnami account, the Agreement.
KubeApps.com or any portion of KubeApps.com may not be reproduced, duplicated, copied, sold, resold, visited, or otherwise exploited for any commercial purpose without express written consent of Bitnami. You may not frame or utilize framing techniques to enclose any trademark, logo, or other proprietary information (including images, text, page layout, or form) of Bitnami without express written consent. You may not use any meta tags or any other “hidden text” utilizing Bitnami’s name or trademarks without the express written consent of Bitnami. Any unauthorized use terminates the permission or license granted by Bitnami. You are granted a limited, revocable, and nonexclusive right to create a hyperlink to the home page of KubeApps.com, so long as the link does not portray Bitnami, or its products or services in a false, misleading, derogatory, or otherwise offensive matter. You may not use any Bitnami logo or other proprietary graphic or trademark as part of the link without express written permission.
If you use KubeApps.com, you are responsible for maintaining the confidentiality of your account and password and for restricting access to your computer, and you agree to accept responsibility for all activities that occur under your account or password. Bitnami reserves the right to refuse service, terminate accounts, remove or edit content in its sole discretion.
Visitors may post reviews, comments and other content; and submit suggestions, ideas, comments, questions, or other information, so long as the content is not illegal, obscene, threatening, defamatory, invasive of privacy, infringing of intellectual property rights, or otherwise injurious to third parties or objectionable and does not consist of or contain software viruses, political campaigning, commercial solicitation, chain letters, mass mailings, or any form of “spam.” You may not use a false e-mail address, impersonate any person or entity, or otherwise mislead as to the origin of content. Bitnami reserves the right (but not the obligation) to remove such content, but does not regularly review posted content. If you do post content or submit material, and unless we indicate otherwise, you grant Bitnami a nonexclusive, royalty-free, perpetual, irrevocable, and fully sublicensable right to use, reproduce, modify, adapt, publish, translate, create derivative works from, distribute, and display such content throughout the world in any media. You grant Bitnami and sublicensees the right to use the name that you submit in connection with such content, if they choose.
You and third parties may be permitted to upload certain software (including machine images), data, text, audio, video, images or other content (“Third Party Content”) to community areas of KubeApps.com. You acknowledge that (a) Bitnami has not tested or screened Third Party Content, (b) you use any Third Party Content is at your sole risk, and Third Party Content may be subject to separate license terms as determined by the person posting such content.
You represent and warrant that you own or otherwise control all of the rights to the content, including any Third Party Content, that you post; that the content is accurate; that use of the content you supply does not violate this policy and will not cause injury to any person or entity; and that you will indemnify Bitnami for all claims resulting from content you supply. Bitnami has the right but not the obligation to monitor and edit or remove any activity or content. Bitnami takes no responsibility and assumes no liability for any content posted by you or any third party.
 BITNAMI MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, AS TO THE OPERATION OF THIS SITE OR THE INFORMATION, CONTENT, MATERIALS, PRODUCTS (INCLUDING ANY SOFTWARE) OR SERVICES INCLUDED ON OR OTHERWISE MADE AVAILABLE TO YOU THROUGH KubeApps.com, UNLESS OTHERWISE SPECIFIED IN WRITING.  TO THE FULL EXTENT PERMISSIBLE BY APPLICABLE LAW, BITNAMI DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.   CERTAIN STATE LAWS DO NOT ALLOW LIMITATIONS ON IMPLIED WARRANTIES OR THE EXCLUSION OR LIMITATION OF CERTAIN DAMAGES. IF THESE LAWS APPLY TO YOU, SOME OR ALL OF THE ABOVE DISCLAIMERS, EXCLUSIONS, OR LIMITATIONS MAY NOT APPLY TO YOU, AND YOU MIGHT HAVE ADDITIONAL RIGHTS.
By visiting KubeApps.com, you agree that the laws of the state of California, without regard to principles of conflict of laws, will govern these Site Terms and any dispute of any sort that might arise between you and Bitnami.
Any dispute relating in any way to your visit to KubeApps.com or to services provided by Bitnami or through KubeApps.com in which the aggregate total claim for relief sought on behalf of one or more parties exceeds $7,500 shall be adjudicated in any state or federal court in Contra Costa County in California, and you consent to exclusive jurisdiction and venue in such courts.
Please review our other policies on KubeApps.com. These policies also govern your visit to KubeApps.com. We reserve the right to make changes to KubeApps.com, policies, and these Site Terms at any time. If any of these conditions shall be deemed invalid, void, or for any reason unenforceable, that condition shall be deemed severable and shall not affect the validity and enforceability of any remaining condition.
BitRock, Inc.
650 Mission Street, 3rd Floor
San Francisco, CA 94105


Home
Nearby Clothing Store
Nearby Restaurants
Night Life
Attraction
Hotels
Nearby Restaurants
Top Restaurants


A supporting device is applied to an electronic device and includes a supporting unit, an adjusting unit and a fixing unit. The supporting unit supports the electronic device. The adjusting unit is connected to the supporting unit for adjusting an angle of the supporting unit. The fixing unit includes a locking part and a fixing part. The fixing part is fixed on a surface, and the locking part connects to the adjusting unit. The locking part is detachably locked with the fixing part so as to fixing the electronic device on the surface. The supporting device is advantageous for providing multiple viewing angles for users, and it is conveniently carried and easily assembled, thereby achieving firmly fixing effect.
The non-provisional patent application claims priority to U.S. provisional patent application with Ser. No. 61/544,091 filed on Oct. 6, 2011. This and all other extrinsic materials discussed herein are incorporated by reference in their entirety.
1. Field of Invention
The present disclosure relates to a supporting device and, in particular, to a supporting device for an electronic device.
2. Related Art
Accompanying the progressive of technology, various kinds of electronic products have been developed for providing better life quality. In order to broaden the applications, many varied electronic products become easily portable and operable anytime. These electronic products include, for example, smart phones, PDA, handheld game consoles, tablet computers, or the likes. They provide a sufficient convenience in our lives and businesses.
Among the above electronic products, the tablet computer is a larger portable electronic device, so that the user can not hold it steadily during operation. Otherwise, when the tablet computer is placed on the tabletop, the screen of the tablet computer is parallel to the tabletop, so that the user must move his/her eyes to the top of the screen to view the displayed image. However, this posture usually results in shoulder soreness and eyestrain of the user, which is unhealthy to the users. Accordingly, the supporting device for the electronic device is introduced.
Regarding to the current supporting device of tablet computers, the available rotation angle and applications of most supporting devices are usually limited. If the supporting device is designed with larger rotation angle and better stability, it will have more complex structure and larger dimension, so that it is uncomfortable in carrying and operation. However, the portable simple supporting device can not firmly and stably fixed at the operation environment. If brief, when the user needs to operate the tablet computer for a long time or change operation locations frequently, the conventional supporting device can not fully support the requirements of the user. This may affect the portability and applications of the tablet computers.
The present disclosure discloses a supporting device applied to an electronic device and including a supporting unit, an adjusting unit and a fixing unit. The supporting unit supports the electronic device. The adjusting unit is connected to the supporting unit for adjusting an angle of the supporting unit. The fixing unit includes a locking part and a fixing part. The fixing part is fixed on a surface, and the locking part is connected to the adjusting unit. The locking part is detachably locked with the fixing part so as to fixing the electronic device on the surface.
In one embodiment, the supporting unit has a clipping part for fixing the electronic device.
In one embodiment, the clipping part is adjustable with respect to the supporting unit.
In one embodiment, the supporting device further comprises a first connector disposed on the supporting unit for connecting with the electronic device.
In one embodiment, the supporting device further comprises a second connector disposed on the locking part and electrically connected with the first connector.
In one embodiment, the supporting device further comprises a third connector disposed on the fixing part. When the locking part is locked with the fixing part, the third connector is electrically connected with the second connector.
In one embodiment, the inner wall of the locking part has a thread corresponding to a thread formed on outer wall of the fixing part.
In one embodiment, the adjusting unit has a first adjusting member and a second adjusting member, and the first adjusting member is pivotly connected to the second adjusting member.
In one embodiment, the locking part has a pivot, and the adjusting unit is mounted on the pivot so that it is rotatably connected to the locking part.
As mentioned above, the supporting device of the disclosure has a supporting unit for supporting the electronic device and an adjusting unit for adjusting an angle of the electronic device with respect to a user. Accordingly, when operating the electronic device, the user can easily move to the optimum view angle and operate it for a long time.
The locking part and fixing part of the fixing unit are detachable. Accordingly, the fixing part can be configured on an object surface at frequently used environments, and the user carries only the residual portion of the supporting device, thereby making the operation of the supporting device more convenient. Moreover, since it is unnecessary to carry the fixing part all the time, the design and material of the fixing part can be properly selected to enhance the stability. In this case, the heavy weight of the fixing part will not cause any uncomfortable in operation and can improve the fixing effect.
Besides, the connection structure of the locking part and the fixing part is very simple, so that the supporting device can be easily and rapidly installed or uninstalled. For example, the locking part and the fixing part can be connected by corresponding screw threads. In practice, the supporting device of this disclosure can provide firm supporting and adjustable view angle. Compared with the conventional art, it is conveniently carried, easily assembled, and can achieve firmly fixing effect.
These and other features, aspects and advantages of the present disclosure will become better understood with regard to the following description, appended claims, and accompanying drawings.
figref[FIG. 1A] is a schematic diagram of a supporting device according to an embodiment;
figref[FIG. 1B] is an exploded rear view of the supporting device of figref[FIG. 1A] ;
figref[FIG. 1C] is a schematic diagram showing the assembled electronic device and supporting device of figref[FIG. 1A] ;
figref[FIG. 1D] is a sectional view showing the internal structure of the fixing unit of the supporting device of figref[FIG. 1A] ;
figref[FIG. 1E] is a schematic diagram showing the movement of the supporting device of figref[FIG. 1A] ;
figref[FIG. 2A] is a schematic diagram of a supporting device according to another embodiment; and
figref[FIG. 2B] is a sectional view showing the internal structure of the fixing unit of the supporting device of figref[FIG. 2A] .
figref[FIG. 1A] is a schematic diagram of a supporting device 1 according to an embodiment, figref[FIG. 1B] is an exploded rear view of the supporting device 1 of figref[FIG. 1A] , and figref[FIG. 1C] is a schematic diagram showing an electronic device E and the supporting device 1 of figref[FIG. 1A] , which are assembled. Referring to figref[FIGS. 1A] , 1B and 1C, in this embodiment, the supporting device 1 includes a supporting unit 11, an adjusting unit 12 and a fixing unit 13. The fixing unit 13 includes a locking part 131 and a fixing part 132. The supporting device 1 is applied to an electronic device E, such as a tablet computer or a smart phone. The structure features of all components of the supporting device 1 will be described in advance hereinafter.
Referring to figref[FIGS. 1A] , 1B and 1C, the supporting unit 11 has a clipping part 111 for fixing the electronic device E. This feature is for illustration only and is not to limit the disclosure. Of course, in other embodiments, the supporting unit 11 may be not equipped with a clipping part 111. The electronic device E can be supported and fixed by the clipping part 111, so that the user can comfortably operate the electronic device E for a long time.
In this embodiment, the supporting unit 11 has a side wall 112, which preferably fits to the shape of the electronic device E. In practice, the shape and size of the supporting unit 11 can be modified according to the applied electronic device E. Moreover, the supporting unit 11 may be configured with skidproof material or element for improving its stability. To be noted, the above-mentioned clipping part 11 as well as the disclosed shape and size is not to limit the present disclosure.
The clipping part 111 can be adjusted with respect to the supporting unit 11 to create a proper accommodating space for fitting the electronic devices E of different sizes. In this embodiment, the clipping part 111 is configured for a tablet computer, so that is can be adjusted corresponding to the size of the tablet computer so as to fixing it on the supporting unit 11. In practice, when the applied electronic E is smaller than the tablet computer, the clipping part 111 is moved to a proper position with respect to the center of the supporting unit 11 for accommodating the electronic device E. Herein, the clipping part 111 has a sliding rail structure, which is not limited, so that it is very convenient to adjust the position of the clipping part 111.
The adjusting unit 12 is connected to the supporting unit 11 for adjusting an angle of the supporting unit 11. In more specific, the adjusting unit 12 has a first adjusting member 121 and a second adjusting member 122. The first adjusting member 121 is connected to the supporting unit 11, and the first adjusting member 121 and the second adjusting member 122 are pivotly connected through a shaft 123. When the first adjusting member 121 is rotated with respect to the second adjusting member 122, the tilting angle of the supporting unit 11 can be adjusted so that the user can easily watch or operate the electronic device E fixed on the supporting unit 11. In this embodiment, the first adjusting member 121 is pivotly connected to the second adjusting member 122 through the shaft 123, so that it is possible to stably adjust the tilting angle of the supporting unit 11. In other embodiments, the first adjusting member 121 and the second adjusting member 122 can be connected to each other by two ball connectors. This configuration can increase the angle of the supporting unit 11 by adjusting the adjusting unit 12.
Except for the above adjustment through the pivotly connection, the locking part 131 may further include a pivot 131 a, so that the base 124 of the adjusting unit 12 has a hole for mounting on the pivot 131 a to connect with the locking part 131. In more detailed, the second adjusting member 122 of the adjusting unit 12 is connected to the locking part 131 through the pivot 131 a, so that it is rotatable about the pivot 131 a. When the second adjusting member 122 is rotated, the supporting unit 11 and the adjusting unit 12 can be rotated with respect to the fixing unit 13. Thus, the supporting device 1 can provide multiple viewing angles for users, which is benefit in the circumstance that the user can not easily move.
figref[FIG. 1D] is a sectional view showing the internal structure of the fixing unit 13 of the supporting device 1 of figref[FIG. 1A] . With reference to figref[FIGS. 1B and 1D] , the supporting device 1 is fixed on a surface through the fixing part 132. The surface can be a surface of any object, such as the surface of the object in the operation environment of the electronic device E. For example, the surface is a tabletop. The fixing unit 13 is composed of two detachable parts, the locking part 131 and the fixing part 132. Herein, the locking part 131 and the fixing part 132 can be easily detached or assembled. In general, the fixing part 132 is fixed on a surface at frequently used environments, and the user only carries the residual part of the supporting device 1 while traveling or moving. This feature is benefit in the portable purpose. Moreover, it is possible to install multiple fixing parts 132 at different environments, so that the user can connect the carried part to any of the installed fixing parts 132 in the desired environment. This is very convenient for the user.
In more detailed, the fixing unit 13 can fix the supporting device 1 by the connection of the locking part 131 and the fixing part 132. The inner wall 131 b of the locking part 131 has a thread corresponding to a thread formed on outer wall 132 a of the fixing part 132. These corresponding threads can align and connect the locking part 131 and the fixing part 132, thereby firmly fixing the locking part 131 to the fixing part 132.
The surface for installing the fixing part 132 is preferably a planar surface. Of course, the surface for installing the fixing part 132 may also be a non-planar surface. In practice, the fixing part 132 can be installed on the surface by adhering, screwing, locking, wedging or the likes. Preferably, a soft pad or a buffer element is configured on the bottom of the fixing part 132 for providing the buffering effect and reducing vibration. This configuration can not only increase the stability of the supporting device 1, but also protect the structures of all components from being damaged by the vibration.
The supporting device 1 can be made of a rigid material such as metal, so that it has better durability. This feature is very important for the supporting device 1 which is frequently carried, thereby preventing the damage and unbalance of the supporting device 1. Otherwise, in other embodiments, the supporting device 1 can also be made of plastic material or elastic material, which makes the supporting device 1 lighter and lower cost.
figref[FIG. 1E] is a schematic diagram showing the movement of the supporting device 1 of figref[FIG. 1A] . Referring to figref[FIGS. 1B and 1E] , the fixing part 132 of the fixing unit 13 is firmly disposed on the surface, and the locking part 131 is connected with the fixing part 132. Thus, the supporting device 1 can stably and firmly stand on the surface. Then, the supporting unit 11 supports the electronic device E, so that the view angle of the electronic device E can be easily adjusted by the adjusting unit 12, and the supporting unit 11 and the adjusting unit 12 can be rotated with respect to the fixing unit 13. In this case, the user does not have to hold the electronic device E all the time and can operate it comfortably.
figref[FIG. 2A] is a schematic diagram of a supporting device 2 according to another embodiment. In this embodiment, the supporting device 2 may further include at least one connector. Referring to figref[FIG. 2A] , the supporting device 2 further includes a first connector 24, a second connector 25, a third connector 26 and a connecting line 29.
The first connector 24 is disposed on the supporting unit 21 for connecting with the electronic device E. In practice, the first connector 24 is connected with a dock connector of the electronic device E. In more specific, the design of the first connector 24 matches the dock connector of the electronic device E. For example, when the dock connector of the electronic device E is a 30-pin connector or a USB connector, the first connector 24 must be corresponding to the 30-pin connector or the USB connector. In addition, the first connector 24 is fixed on and exposed from the bottom of the supporting unit 21, so that it can increase the stability as the first connector 24 is connected to the electronic device E, thereby preventing the unsteady signal or current input. Of course, the first connector 24 can be detachable, so that it is possible to change the proper first connector 24 corresponding to the electronic device E. This configuration can increase the applications of the supporting device 2 and broaden the applicable electronic devices E.
In this embodiment, the second connector 25 is disposed on the locking part 231 for electrically connecting with the first connector 24, and the third connector 26 is disposed on the fixing part 232. In more specific, one end of the connecting line 29 is connected to the first connector 24 and another end of the connecting line 29 is connected to the second connector 25. When the locking part 231 is locked with the fixing part 232, the third connector 26 is electrically connected with the second connector 25.
After connecting the dock connector of the electronic device E to the first connector 24, the electronic device E can be applied with an additional terminal device through the connection of the first connector 24, the second connector 25 and the third connector 26. This configuration can integrate the functions of data transmission and charging.
In order to more firmly connect the second connector 25 and the third connector 26, referring to figref[FIG. 2B] , a circuit board 27 is disposed at the connecting portion between the second connector 25 and the third connector 26, and a frame 28 is configured to fasten the circuit board 27 at the connecting portion between the second connector 25 and the third connector 26. In this case, the frame 28 is screwed on the fixing part 232. The circuit board 27 is configured for fixing and electrically connecting the third connector 26, thereby providing the circuit layout and data transmission for the third connector 26, which is not limited herein.
To be noted, although the above embodiment discloses three connectors for example, it is also possible to configure one, two or more connectors in other embodiments. For example, the supporting device may only include a single connector, which is configured to connect to the electronic device and the power source for charging.
Although the disclosure has been described with reference to specific embodiments, this description is not meant to be construed in a limiting sense. Various modifications of the disclosed embodiments, as well as alternative embodiments, will be apparent to persons skilled in the art. It is, therefore, contemplated that the appended claims will cover all modifications that fall within the true scope of the disclosure.


Service Robotics & Technologies (SRT) integrates innovative software solutions with 3rd party hardware platforms to augment human driven tasks as performed in the custodial, hospitality, and food/beverage industries.
Why would a robotics startup be making an online ordering system?
Do you have a business with a task that can benefit from some robotics expertise? Maybe we can help.
Find out more about some of the research projects we're working on.
SRT would like to thank KUKA Laboratories for selecting us for the KUKA Innovation Award and for the opportunity to work with a youBot for the last 8 months in developing and maturing our Autonomous Custodial Architecture (ACA). The youBot platform provided a strong demonstration capability to allow implementation of our architecture and we hope to continue maturing this work beyond the Innovation Award opportunity. We would like to extend our congratulations to the University of Zurich, Robotics & Perception Group, the winners of the KUKA Innovation Award on their excellent work with their collaborative air-ground robotics demonstration!
We have reached the mid-point of the KUKA Innovation Award program, and progress has been pretty strong so far. SRT has been working towards the development of an Autonomous Custodial Architecture (ACA) to control a multi-robot system through the various roles of cleaning an office environment. The KUKA youBot is playing the role of trash can detection and emptying, while a swarm of iRobot Creates are being used to simulate vacuuming. Utilizing shared office space mapping and robot localization, along with task-driven assignments, these systems are successfully navigating their environment and fulfilling their robotic roles. We are looking forward to competing with other great innovative organizations during the Automatica 2014 Conference in Munich.
We're proud to announce that Service Robotics & Technologies has been selected as one of the teams in the sponsored track of Kuka's Innovation in Mobile Manipulation Award competition!
The award is intended to accelerate the pace of innovation in the field of mobile manipulation at large and to better prepare technology transfers from academia and research to industry. The selected finalists will present their solutions not only to the jury, but also to KUKA management and to the expert public at the leading international robotics trade show Automatica 2014, where the award ceremony will take place.
We can't wait to receive our YouBot and start working with it!


I was reading the site in Dutch, thanks by the way for translating it to other languages, it makes it easier, and I saw some mistakes here and there. I went to the guy that translated everything's Battlelog Profile, and I saw he was German, so if you want, I can retranslate everything so there aren't that much mistakes. There are some kind of mistakes, that are basicly like: Don't are afraid to send us your new ideas. So if you want me to translate again, just e-mail me :D


Overview
The cluster test simulates work performed on a Akka cluster and results persisted in a co-located Cassandra cluster.
This live documentation site is served from the same service that exposes the API. Developers can learn about the API by interacting with the service through the web forms for each endpoint. The try-it button calls the real service with the parameters in the forms and displays the results.
Architecture
The cluster is a co-located Akka and Cassandra one. Each node exposes identical services:
- Spray.io HTTP service (API endpoints plus this Live Doc site)
- Akka Cluster Node - actor based processing
- Cassandra Cluster Node - Data store
Load Balancing
There are two levels of load balancing. The first is through the Load Balancer (e.g. Cloud Service or HAProxy) - this distributes incoming web traffic equally to all healty nodes. The second is Akka Cluster work balancing. The cluster has a number of routees distributed across all cluster nodes. The distributor distributes work to the least loaded nodes. Least loaded in the sense of CPU, Memory, Latency or a combination thereof. Each routee simply creates a new worker actor when it receives a request. The Worker does the calculation and dies off after updating the data store.Optimizations
Computational Isolation
You will notice, especially for small clusters, that the cluster can easily be loaded to 100% CPU usage across all cores. The Spray HTTP service is resource starved by this and the responses will become sluggish or time out. The solution is fairly simple - Akka allows us to define cluster roles, we divide the cluster into a front-end part and a back-end part. The calculation work is done exclusively on the back-end, leaving the front end resources to ensure timely responses to clients.Data Locality
When the replication factor on the keyspace we use is smaller than the number of nodes all data will not be present on each node - the worker actors will sometimes do a cross cluster call, which is more expensive, latency wise. It is possible to predict which nodes contain specific keys and we can launch worker actors with this in mind.Resiliency
The combined cluster is fairly resilient out of the box - we can lose a node and the Load balancer as well as Akka and Cassandra will notice and stop routing traffic, work and data to the dead node. It is further possible to use Event Sourcing to make sure work-in-progress on a failed node is not lost and can be continued.-
Factorial Calculation
The PUT call allows the user to add work to the cluster by specifying a input to a factorial function. The cluster will distribute the work to a actor and persist the result to the data store indexed by the input number. The GET call retrieves the result if it has been calculated. Results that have been calculated previously are not re-calculated - their results are looked up in the data store and returned.


This past weekend (February 1-3) the Office of Digital Learning (Eberly College of Science at Penn State) participated in the eighth consecutive Drupal Camp NJ , hosted at Princeton University. The annual event brings developers and industry professionals from varying backgrounds and skill-levels together to share all things Drupal through engaging presentations, co-working sessions, and networking.
This year there were a number of great discussions to get involved with, but one topic continued to dominate the conversation - decoupling Drupal. Decoupling Drupal essentially means separating Drupal’s front-end (theme layer) from it’s back-end (data/content layer) using a custom JavaScript framework. While there are still some discussions as to which framework is ‘best’ when decoupling Drupal, the general consensus is that the decoupled method is becoming an industry-wide movement.
Jesus Manuel Olivas (Head of Products at weKnow ) showcased decoupling tools like Gatsby and Tome . These tools assist in creating static sites by decoupling Drupal’s theme and just using Drupal for content creation.
Saurabh Chugh and Surendra Singh hosted a discussion, ‘Decoupling Patterns, Services and creating an enterprise level editorial experience’ where they also emphasized using decoupled applications to display content.
Saurabh Chugh and Surendra Singh hosted a discussion, ‘Decoupling Patterns, Services and creating an enterprise level editorial experience’ where they also emphasized using decoupled applications to display content.
Our team demonstrated decoupled development when Michal Potter and Charles Lavera joined ELMS:LN lead developer, Bryan Ollendyke (College of Arts and Architecture - Penn State) to present work on web components. Specifically, the trio discussed the tooling they use to quickly generate and publish their components onto the web (WCFactory / Drupal webcomponents module ). In addition, Bryan explored the future of content-authoring with a completely headless authoring experience called HAX.
Get decoupled at Drupal Camp NJ and check out our presentation below, then use this link ---> and try HAX for yourself!


{% extends "base.html" %} {% block title %}Delete API Key{% endblock %} {% block content %}
Really delete API Key {{ object.key_id }} and all associated content?


Table of Contents
Essence of LA - 3b1b
LA (Stanford Review)
Definitions and Intuitions
- Linear Algebra:
Linear Algebra is about two operations on a list of numbers:- Scalar Multiplication
- Vector Addition
- Vectors:
Think of each element in the vector as a scalar that scales the corresponding basis vectors.Meaning, think about how each one stretches or squishes vectors (in this case, the basis vectors \(\hat{i}, \hat{j}\))
$$\begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} = \color{red} x \color{red} {\underbrace{\begin{bmatrix} 1 \\ 0 \end{bmatrix}}_ {\hat{i}}} + \color{red} y \color{red} {\underbrace{\begin{bmatrix} 0 \\ 1 \end{bmatrix}}_ {\hat{j}}} = \begin{bmatrix} 1\times x + 0 \times y \\ 0\times x + 1 \times y \end{bmatrix} $$
- Span:
The Span of two vectors \(\mathbf{v}, \mathbf{w}\) is the set of all linear combinations of the two vectors:$$a \mathbf{v} + b \mathbf{w} \: ; \: a,b \in \mathbb{R}$$
- Linearly Dependent Vectors:
If one vector is in the span of the other vectors.
Mathematically:$$a \vec{v}+b \vec{w}+c \vec{u}=\overrightarrow{0} \implies a=b=c=0$$
-
The Basis:
The Basis of a vector space is a set of linearly independent vectors that span the full space. - Matrix as a Linear Transformation:
Summary:- Each column is a transformed version of the basis vectors (e.g. \(\hat{i}, \hat{j}\))
- The result of a Matrix-Vector Product is the linear combination of the vectors with the appropriate transformed coordinate/basis vectors
i.e. Matrix-Vector Product is a way to compute what the corresponding linear transformation does to the given vector.
Matrix as a Linear Transformation:
Always think of Matrices as Transformations of Space:- A Matrix represents a specific linear transformation
- Where the columns represent the coordinates of the transformed basis vectors
- & Multiplying a matrix by a vector is EQUIVALENT to Applying the transformation to that vector
The word “transformation” suggests that you think using movement
If a transformation takes some input vector to some output vector, we imagine that input vector moving over to the output vector.
Then to understand the transformation as a whole, we might imagine watching every possible input vector move over to its corresponding output vector.
This transformation/“movement” is Linear, if it keeps all the vectors parallel and evenly spaced, and fixes the origin.
Matrices and Vectors | The Matrix-Vector Product:
Again, We think of each element in a vector as a scalar that scales the corresponding basis vectors.- Thus, if we know how the basis vectors get transformed, we can then just scale them (by multiplying with our vector elements).
Mathematically, we think of the vector:$$\mathbf{v} = \begin{bmatrix}x \\y \end{bmatrix} = x\hat{i} + y\hat{j}$$
and its transformed version:
$$\text{Transformed } \mathbf{v} = x (\text{Transformed } \hat{i}) + y (\text{Transformed } \hat{j})$$
\(\implies\) we can describe where any vector \(\mathbf{v}\) go, by describing where the basis vectors will land.
If you’re given a two-by-two matrix describing a linear transformation and some specific vector and you want to know where that linear transformation takes that vector, you can (1) take the coordinates of the vector (2) multiply them by the corresponding columns of the matrix, (3) then add together what you get.
This corresponds with the idea of adding the scaled versions of our new basis vectors.
$$ \mathbf{v} = \begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} = \color{red} x \color{red} {\underbrace{\begin{bmatrix} 1 \\ 0 \end{bmatrix}}_ {\hat{i}}} + \color{red} y \color{red} {\underbrace{\begin{bmatrix} 0 \\ 1 \end{bmatrix}}_ {\hat{j}}} = \begin{bmatrix} 1\times x + 0 \times y \\ 0\times x + 1 \times y \end{bmatrix} = x\hat{i} + y\hat{j} $$
The Matrix-Vector Product:
Non-Square Matrices \((N \times M)\):
Map vectors from \(\mathbb{R}^M \rightarrow \mathbb{R}^N\).
They are transformations between dimensions. - The Product of Two Matrices:
The Product of Two Matrices Corresponds to the composition of the transformations, being applied from right to left.
This is very important intuition:e.g. do matrices commute?
if you think of the matrices as transformations of space then answer quickly is no.
Equivalently, Are matrices associative? Yes, function composition is associative (\(f \circ(g \circ h) = (f \circ g) \circ h\)) - Linear Transformations:
Linear Transformations are transformations that preserve the following properties:- All vectors that are parallel remain parallel
- All vectors are evenly spaced
- The origin remains fixed
-
The Determinant:
The Determinant of a transformation is the “scaling factor” by which the transformation changed any area in the vector space.The Negative Determinant determines the orientation.
Linearity of the Determinant:
$$\text{det}(AB) = \text{det}(A) \text{det}(B)$$
-
Solving Systems of Equations:
The Equation \(A\mathbf{x} = \mathbf{b}\), finds the vector \(\mathbf{x}\) that lands on the vector \(\mathbf{b}\) when the transformation \(A\) is applied to it.Again, the intuition: is to think of a linear system of equations, geometrically, as trying to find a particular vector that once transformed/moved, lands on the output vector \(\mathbf{b}\).
- This becomes more important when you think of the different properties, of that transformation/function, encoded (now) in the matrix \(A\):
- When the \(det(A) \neq 0\) we know that space is preserved, and from the properties of linearity, we know there will always be one (unique) vector that would land on \(\mathbf{b}\) once transformed (and you can find it by “playing the transformation in reverse” i.e. the inverse matrix).
- When \(det(A) = 0\) then the space is squished down to a lower representation, resulting in information loss.
- This becomes more important when you think of the different properties, of that transformation/function, encoded (now) in the matrix \(A\):
-
The Inverse of a matrix:
The Inverse of a matrix is the matrix such that if we “algebraically” multiply the two matrices, we get back to the original coordinates (the identity).
It is, basically, the transformation applied in reverse.Why inverse transformation/matrix DNE when det is Zero (i.e. space is squished:
To do so, is equivalent to transforming a line into a plane, which would require mapping each, individual, vector into a “whole line full of vectors” (multiple vectors); which is not something a Function can do.
Functions map single input to single output. - The Determinants, Inverses, & Solutions to Equations:
When the \(\text{det} = 0\) the area gets squashed to \(0\), and information is lost. Thus:- The Inverse DNE
- A unique solution DNE
i.e. there is no function that can take a line onto a plane; info loss
-
The Rank:
The Rank is the dimensionality of the output of a transformation.
Viewed as a Matrix, it is the number of independent vectors (as columns) that make up the matrix. - The Column Space:
The Column Space is the set of all possible outputs of a transformation/matrix.- View each column as a basis vector; there span is then, all the possible outputs
- The Zero Vector (origin): is always in the column space (corresponds to preserving the origin)
The Column Space allows us to understand when a solution exists.
For example, even when the matrix is not full-rank (det=0) a solution might still exist; if, when \(A\) squishes space onto a line, the vector \(\mathbf{b}\) lies on that line (in the span of that line).- Formally, solution exists if \(\mathbf{b}\) is in the column space of \(A\).
-
The Null Space:
The Null Space is the set of vectors that get mapped to the origin; also known as The Kernel.The Null Space allows us to understand what the set of all possible solutions look like.
Rank and the Zero Vector:
A Full-Rank matrix maps only the origin to itself.
A non-full rank (det=0) (rank=n-1) matrix maps a whole line to the origin, (rank=n-2) a plane to the origin, etc. - The Dot Product/Scalar Product:
(for vectors \(\mathbf{u}, \mathbf{v}\))$$\mathbf{u} \cdot \mathbf{v} = \mathbf{u}^T \mathbf{v}$$
- Geometrically:
- project
- Geometrically:
- Cramer’s Rule:
-
Coordinate Systems:
A Coordinate System is just a way to formalize the basis vectors and their lengths. All coordinate systems agree on where the origin is.
Coordinate Systems are a way to translate between vectors (defined w.r.t. basis vectors being scaled and added in space) and sets of numbers (the elements of the vector/list/array of numbers which we define).- Translating between Coordinate Systems
Imp: 6:47
- Translating a Matrix/Transformation between Coordinate Systems
Implicit Assumptions in a Coordinate System:
- Direction of each basis vector our vector is scaling
- The unit of distance
- Translating between Coordinate Systems
-
Eigenstuff:
Notes:
- Complex Eigenvalues, generally, correspond to some kind of rotation in the transformation/matrix (think, multiplication by \(i\) in \(\mathbb{C}\) is a \(90^{\deg}\) rotation).
- For a diagonal matrix, all the basis vectors are eigenvectors and the diagonal entries are their eigenvalues.


Don’t let unwise December spending result in ‘Januworry’
Legodi cautioned against the services of loan sharks in January
by Enver WesselsMBOMBELA – Black Friday has come and gone, and consumers who were on the prowl for bargains face the prospect of a long January.
The National Credit Regulator’s (NCR) acting manager of education and communication, Adv Kedilatile Legodi, warned against unwise spending over the festive season. Her warnings come in the wake of a successful Black Friday weekend.
Riverside Mall marketing manager, Beate Dednam described last week as hugely successful for retailers across the country.
ALSO READ: How to keep your car on the road in the wet
“This year’s Black Friday was no exception. The mall was abuzz and there was a steady flow of consumers throughout
the Black Friday weekend.
“Trolleys were filled with a variety of products from our retailers and we believe our tenants benefited from the Black Friday trade,” said Dednam.
It is against this background that Legodi reminded consumers that December salaries essentially have to go towards settling school fees, uniform, food, transport and other expenses.
ALSO READ: Reward issued for information on the murder of Catherine Irving
“Failure to consider January expenses before spending during the festive season will indeed make January feel longer
and financially stressful,” she said. She further cautioned against the services of loan sharks in January.
“Desperation to borrow money in order to cope with January expenses will make you a target for unregistered credit providers who would usually advertise using phrases such as ‘Blacklisted consumers welcome’ and
‘cheap credit’, and often require you to pay a fee before they pay out the allegedly approved loan.”
Unregistered credit providers’ interest rates are excessive and their fees do not comply with the National Credit Act. This, coupled with other illegal practices such as holding on to the borrower’s ID, bank cards (including pin numbers) and SASSA cards, is on contravention of the Act.
ALSO READ: Elderly man still waiting after two months for hip operation
“Consumers are advised to only use NCR registered credit providers and report those that retain their instruments,
such as bank cards, to the NCR. Spending wisely during the festive season will alleviate the need for consumers to borrow money in January,” Legodi concluded.