Preface
- I got this offer a month ago and i am pretty satisfied about it.
- This is a kinda long story about How I Got My First Official Full-Time Job, it’s been quite a journey and it just like riding a Roller-Coaster.
- I was struggled with choosing which category of this story belongs and then it leads to another problem that which language i use to write this story.
- This problem is solved. I put this post in my personal blog instead of my coding/tech blog. So i considered this is a life-related story.
- This story involves servals companies and some beautiful/smart/nice girls.
- I am really really thankful for the helps the HRs gave to me, I could still be desperately finding a job without their help.
- I feel so lucky.
Let the Roller-Coaster begin.
In the early September of this year, when i took off the plane to my university. I saw massive recruit advertisements posted by Alibaba INC.
- I started to wanted to work at Alibaba a year ago, because i like the way they do things.
- Alibaba is one of the most active company in national/world-wide open-source community, which i really really look up to.
 Alone with Baidu and Tencent.
I was planed to finding a job in next year, just one or two months before graduation, because i still has some project i want to do in those semester.
Now, it looks like my plan needs to be changed. I don’t know they start recruiting people this early and i just ran into this message. So, i told my self you gotta take this opportunity, or you will be regret about this. then, i sent out my resume, and i got their invitation to participate in their written exam in Tianjin.
It’s about a week before the exam begin. I am so so unconfident about my written exam, which is the first round of their recruitment. It’s so important to me. But I am that kind of guy which barely showed up in the class, instead writing codes in my room:) and always ended up with a little above 60’ in the school exams.
- FYI, I don’t code that much right now, I spent more time with friends and having fun :)
I prepared the written exam for a few days, noting special, just some basic data structure, algorithm and some basic knowledges. I thought that if i passed this exam, I will have a great shot of getting this offer. Because i know i have so much to show which they can not found in my resume or exam paper.
So I took this exam and i will get the result about wether i will get to the next round in one or two days later.
A day went by, a friend of mine, who also take part in this exam ask me if i got though the first round and he was already failed at second round. i began to worried because i still got no notice from the Alibaba. Somehow, I made a surprise decision which i don’t know why i wanna do that on that day. I asked my friend about the place he took the interview and i just went to there, to see if i can get any infos about my situation.
I washed my face and shaved a little bit, then just ran out to the hotel where they took interviews in the night. Luckily, there were not any guards in the door. I saw a beautiful HR wearing suit, dark skirt with high heels and dark nail polish walked into me. I still wonder why i still remember her outfit in that intense situation, i’d have felt nervous at that time :(
HR: what are you doing here?
Me: I want to know if i passed the written exam.
He: We are still working on it, we will inform some students later.
Me: Since i am here already, can i just do the interview?
HR: what ? NOT! It’s already too late and interviewers were already left.
HR: So you just come here to interview?
Me: Oh, not. i already took the exam, but i was afraid i didn’t make it. I know some guys already took the interview today and I also know that i am much much better than them.
Me: Can you get my result now? just let me know if i still have any chances.. I started to worried.
HR: Ok, fine.. so you come with me, i will check your score upstairs.
So, we went to the upstairs and just doing some meaningless chat while waking… blah..blah…blah
Then she came back and said.
HR: okay, you almost fail the exam. now you can go back and wait for further notice, meanwhile, you can start to prepare your interview, like those projects, codes you mention in your resume…
ME: Thank you! thank you so so so much. But i don’t think i need to prepare my interview. I know what i got, it’s okay. thank you!!
ME: Are you sure i get to the interview? did you double-check that?
HR: Yeah, just go and wait for our calls….
The day i start to loving Subway.
in the next, i got a call from the hr and they want me to do the interview at 15:00 today at same hotel i visited last night.
- I put on a red shirt, that day, for a guru once tell me that red is my lucky color and i need to eat more meat and barbecue :)
I got dressed and head out, it’s kinda early before the interview begin. so i went to a Subway nearby. It’s my first time that i really really enjoy the Sandwich there.
* Now, I became a Subway fan, along with Burger King.
Then i went to the hotel to wait for my interview, i met some guys and we chat a little bit. I know i have the lowest score on paper and I am from a not that famous university. But, yeah. i don’t even feel any worried about that. I just know that I can beat them.
First round of the interview(System Engineer)
Finally, It’s my turn for the interview. i walked in and sit, my interviewer is a middle aged guy. But i can see that he is so serious about technical.
- After I finished the interview, i did a little on him, and it turned out that he has more than 10 years experiences and made a quite reputation in him field.
I sit down, he started introduce himself and want me to introduce myself. I talked about my university experiences, some of the project of mine and why I am choosing Alibaba. There’re not that much questions and i think i’ve handle them pretty well.
Some of the questions are:
- what do i know about Open Source softwares.
- The reason why i love C & Linux so much
- What do i want to do if i join Alibaba
- What do i think this position(System Engineer)’s job
- My views on math and developers.
And we even talked about a project i working on:)
Them, i got a pretty surprising respond. He think the R&D position might be more suitable for me. So, I was transfer to the R&D interview.
Second round of the interview(Research/Develop Engineer)
So, I start my second round. As far as i know, this R&D position is the most difficult position for me, because this position is the hottest position people want to get in and i will have to compete with a lot of students from Tianjin’s top universities.
- To those who don’t even know what they want, they applied to a R&D position.
There’s no way back. I even thought i will just get the offer if i stay in the System Engineer position. Because one of my big advantage is That I had pretty great Linux experiences/skills in the past years.
This interviewer is pretty young and smart. So i know i might have had a hard time for this one.
When i sit down and we greeted. then he start to asked questions. most questions I answered fine. But when the problems got deeper, i starter to freak out, because I really didn’t study something this deep, at this low level.
Since I put quite difference fields or skills in my resume, he almost check every single point of those fields. It turned out to be fine, for I wrote those entries honestly :)
Then, I pass this interview. March On!
Third round of the interview(Research/Develop Engineer)
This round is much easier than the pervious one. but that’s not the point of this round.
Before i start of this round of interview and was in the waiting room. Most people had been eliminated in the previous rounds, so the room is kind of empty. there’re only about ten students in the room, and some of us might get fired in the upcoming rounds.
A girl with New-Balance shoes came in, I gotta admit she was kinda beautiful, considering that she also had some skills. So instead of preparing for the next upcoming interviews, I was trying to find out any topic we can chat about:) I don’t know how i start this chat, but it turn out to be a pretty good one.
She: I had a few Linux experiences, and i am here for a System Engineer position.
Me: I just transfer from System Engineer to R&D. So you gotta grab this one:)
She: Okay, i will try..
No way!! This girl knows Linux and make it to this round, it looks like she really got something as well. I gotta ask for her number later, i told my self.
Then I saw that HR, the life-saver i met the other night.
Me: HaHa, Sure:)
A few minutes later, I got into the interview room again. This time, the interviewer looks kinda serious and unfriendly.
But it turned out i was wrong, we stared with a shell command, then he want me to implement those commands with servals programming languages i know and write it down in paper, then he just walked out.
The Python version is kinda easy, but the C version is just, it needs a lot of lines of codes to write every function then put them together. Finally, he know what i was doing and asked if i want to work in Hangzhou. I definitely said yes.
So, I passed this round as well. Went back to the waiting room.
Fourth Round of the interview(HR)
I got a great news that there’s no more technical upcoming interviews, what a relief!
That girl in New-Balance was still here waiting for her next round, so I gave her some tips about some Linux basic stuffs that the interviewer might ask.
That HR took a photo of me and the girl, that’s the only picture i got from this interview.
Then, I start my last interview and it’s around 7:00 pm.
This time, the interviewer is a mid-aged women who just 12 years older than me, she is very kind to me and I can see she was a pretty girl back in her youth.
We talked and laugh a lot, it didn’t like a interview at all. we talked about my failure relationship at university, how i got dumped by that girl i cared about, some crazy stuffs i did in those years and How i became the so-called leader of this so-called cloud computing group in university. also, how i feels about HangZhou’s foods and life there.
I said I love to accept any kind of challenge & changes, which i do. including move to a whole new city and making new friends, meet new people.
She said i have so many interesting ideas, but I might be unstable. for i stopped school for a year, just because i found the life in university was boring. which i accepted that. i did break any kinds of rule for so so many times:)
Finally, She let me go and want me to wait for further notices.
At that time, i thought i got the offer for sure and i felt so excited.
Later
I went out of the hotel and it’s around 8:00. I forgot to say goodbye to the HR and that girl in New-Balance. But i know i will met them later
So I planed to bring a little gift to that HR when i came back to sign the offer in a few days later.
Its far from the finale
I started to plan my future life in Hangzhou the other day, with quite a lot confident that i will get that offer soon. But, after a few days went by, i felt worried and terrible. then, I’ve been told that those HR staffs were already left Tianjin. So, I found out that i didn’t get the offer from Alibaba.
I summarized this experience of the Alibaba interview was just like riding in a roller coaster and it finally crashed But.. keep reading :)
It hurts me a lot. I stared to doubt myself for a few days. And then is national holiday but i really really didn’t in the mood of enjoy that holiday. It’s bad.
- A girl showed up, which makes me felt a little bit better:)
I also read some articles in those days. read some stories about how those people get their first job and how their thought about that which i normally wouldn’t read at all. Most of people mentioned about luck, which makes me feel a little bit better. Maybe i was just need some luck, i thought. And i had to accept the fact that i was not that awesome as i thought i was. That is not the end of the world, i told myself.
Right now, since the offer of Alibaba is gone. I need to get a job from somewhere else. meanwhile, I started to learn and writing some stuffs. Hoping it could be helpful during this job hunting process.
A few weeks later, I sent my resume to some companies and I did got some feedbacks. and they want me to have a interview.
So I went to beijing for a few days, to take those interviews, one by one.
- IBM
- Opera
- Ctrip
- The surprising one
- Baidu
- Tencent
The blue giant - IBM
Since i can not have a Linux based job at Alibaba. the first company came to my mind is IBM. that company is making a huge contribution to the Open Source and play as a important role in Linux Community. Also it has a very great reputation in world wide IT industry.
Because of my bad education background, which those famous foreign company consider as a big factor, it took much longer before them approach me.
First, It was a phone interview, which i was doing fine, I guess. But i gotta admit, that was a really tough one. the interviewer asked a lot of questions about kernel, Operating System and C Language. none of them I can learn from university but all by myself. there is a english interview as well:) my accent is bad, but i told him that it wouldn’t be a problem, i just need some time to get used to that.
I got a feedback from a friend, he said i was doing ok especially for a student that comes from this second-class university and I made it to the second round. So i need to go to Beijing, IBM HQ of China.
- I also had subway that day before i took the interview.
Those people in IBM are pretty skilled and most of them had a really great education background. Even taxi driver knows IBM in that district. You know, that taxi drivers in Beijing are barely know any places:(
My second round of interview in IBM began, I first took a English paper test, which i found is quite easy for me:)
Then, Two interviewer came in, that was the nightmare.
First, we talk about at a very low level how a kernel being boot up. which i’ve never dig up to.
Then, Their is some question about C and pointers. They want to to write the memory layouts in the blackboard, in bytes. Thanks to my pretty solid C foundation, i figured out those problems, but still, believe me, that’s hard!
Later, I just can not answer those question i don’t even remember now.
During this interview, i just feel like i was naked and those two evil interviewers don’t even like to talk to me. And they said i should have take the initiative during the interview and show them what i got, instead, i just let them to ask me those questions i don’t really good at.
After this interview was over. I got some feedback as well, they said i was doing pretty good in that interview, considering my university and my age. and want me to wait a few days for further notice.
The big red browser - Opera
There is a python position opening form me and they want me to come over and doing a interview in Beijing, as well.
I was told that this interview will only took in less than one hour, and i had two interviewer.
We start with some python and networking basic. like some weird python syntax and usage, http, tcp ip. I answer they pretty great. Then i just describe python’s dict implement which i study for a while, after that i know i will definitely pass this one.
PS, The Opera’s office is awesome!
The e-travel leading company - Ctrip
That opening is kind of like the one that ctrip offers, but it’s more related to Cloud Computing.
This one is quite this tough, because the interviewer thought i might have more experiences which i didn’t. So, this one didn’t end well.
The surprising one - Sina
I sent my resume to a Sina’s HR and I explained why i couldn’t make to Tianjin to take their written exam in the late night around 1 am. Luckily enough, she is still online and forward my resume to a director. then, Right after i finished the Ctrip’s interview and ready to get some sleep, I got a call from that director and he ask me when can i come to Sina’s HQ to have a interview
Why Now?
So, i got dressed, jumped out of the bed and headed to Sina.
That director is kind of like my previous boss back in the days when i was a intern. So, i feel so good with him.
So, the interview begin. We talked about some of my skill and he start to find out that i really, really got something. then he asked me of what kind of books i’ve read during college days.
That was a funny moment, i said, okay, don’t laugh, my first one this a quite bad book, the green C programming book. HaHa
Then, i stop reading that crap.. I start to reading those famous technical books, like those:
- The C Programming Language, aka K&R C
- Computer System, A programmer’s Perspective
- APUE, Advance Programming in UNIX environment
- TCP/IP… blahblah
Then, he ask me, why you didn’t read Richard Stevens’s UNIX Networking Programming, and i answered, yeah, i just found out this problem lately, it’s just because when i ready to read this book, i start to write python codes, and you know, python is networking is easy…
It just bad timing:( then we laugh again.
then he introduce his team to me, and how important his team is.
I can see he is pretty satisfied with me, then he said, if i can give you the offer right now, how much salary you want and i give him a range. then, he want me to wait a little while for the next round of the interview.
The second round of the interview just begin in a few minutes later, the interviewer is a quite old guy, the director’s boss. This time, we discussed some problem a little deeper, he was kind to me and he was also satisfied about my interview. i can feel that:)
Then, He want me to wait for another round, this round’s interviewer is a senior engineer. He came in and said he only wanted me to write some code in paper and want me to relax. he just want to check if i am really that good like those previous interviewer said.
I said ok, then i wrote some functions in C, as he required. the interesting part was just a few seconds later when i started writing codes, he asked me if i can keep talking with him while writing those codes, i said, ok, no problem. i just feel so confident at that time.
I finished those coding exam and we talk about some trick in C and Linux, that’s fun. Then he ask me if I can coding in lisp, I said, I might just can writing some simple Emacs configure files:)
Ok, this round is over and congrats to you:) he said.
After this round, the director came back, and tell me i was doing a pretty great job in those interviews and he’s certain that he will gave me the offer.
He said he could see that i had great enthusiasm about programming. and he could feel the passion inside me, that’s very rare. Now, it’s up to me to decide wether to take this offer or not.
Then, He continued,
I know you will get some better offers in the future, the only thing
I can do right now is giving you the offer. Now, you have at least one offer from us. and you can go back and take a good rest.
Wow, that’s just so quick before i realized that i just got an offer, But i want to wait some times before making any decisions.
Suddenly I felt so relaxed and took a nice dinner before i headed back to the hotel.
The director’s exact word about I will get some better offers, really really give me confident, which i’ve lost for some time and i felt like i was awesome again!
Also, I am really really thankful to that Sina’s HR, her got my resume in the midnight and arrange my interview as soon as she can. In that day, I just thought that she is the one that make my day lighter and brighter
So, I went back to Tianjin the other day, started waiting for the messages from those companies.
You think that’s the end of the story? No Way!
On my way back, i got some interview invitation in a few weeks later from Baidu & Tencent.
- I am not very sure about why i eventually skip those two interview:(
Meanwhile, i start again, to looking for informations about that girl in New-Balance i met in Alibaba interview. luckily enough, i found a guy in her school and that guy had so much connections. then, bingo. i found that girl eventually and we talk a lot, like old friends. that’s great.
I also trying to get in touch with that HR i met in Alibaba for that photo, and express my gratitude to her, even though I didn’t make it to the Alibaba. I almost search every weibo that were being sent in that places during that day. But I didn’t make any progress about that.
Then, I got messages from Opera and they want me to take the next round of interview, which, i decided not to go. For i didn’t think that offer is suitable for me.
IBM came later and they still want me to wait, i said ok.
The problem at that time was IBM or Sina.
Sina is a pretty good one for me.
I might be the first one who got the sina’s offer, because that day i took the interview in Beijing was the first day of Sina’s campus recruitment. That means while those students are taking their written exam, I’ve already got the offer:)
So, I know sina’s offer is pretty good and I almost decided to come over and sign the documents, then give over with this job hunting thing.
The Roller-Coaster is keep going.
Days later, I got a really really un-except call from Alibaba OMG!! I could felt my heart started to beat again! No kidding!
I wanted to figure out what is going on with my status. And They said that they did not actually declined me at the first place, Instead, they put me into a waiting list somehow. now, there’s a opportunity for me. OMG!!
During those days of waiting, I know that my offer in sina is a pretty good one, compare to those ones who also got the offer from Sina. Plus, the position is in one of the hottest team.
A few days of suffering on waiting, again, i here waiting! I got another call from Alibaba and they want me to sign the offer the next day.
Despite the fact that i didn’t get the offer from Alibaba at first place and the pretty good offer & position in sina, I decide to go to Beijing and sign the damn offer with Alibaba @ Hangzhou
That day i got up quite early, but time was so tight. Even I had that feeling that i might see the HR i met in Tianjin that day, but i just do not have any extra time to think about that:(
When i entered into that room, Oh, there she was:) I said hi, then there were so many stuffs I wanted to said to her, but, i don’t know which one to start. So, i just pick up one randomly and started chatting, blah..blah..blah
Later that day, I got the photo she took at Tianjin with me and that New-Balance girl via Laiwang.
So, thats how i got her Laiwang Account.
- Laiwang is a mobile IM APP, one of the Alibaba’s product.
I think we are friends now, and just a few minutes ago, she told me that she wanted to read this blog:)
- So I gotta be careful with my words.
That’s how i got my first official full-time job
That’s it. I got off the roller-coaster and continue my adventure, maybe that already started.
Thoughts
I know that’s not easy for me to get this first official full-time job, but, deep down in my heart, i wasn’t too worried about that.
After all, I know those AWESOME codes i wrote and somebody will eventually found out the value of those codes.
PS, Finding a perfect job is easier than got a girlfriend.
- You know what, when it comes to offer, i can still have choices!
PSS, Writing this blog is harder than write codes.
PSSS, You should take a good rest now and look outside, it’s hard for you to read this long-piece-of-crap-and-boring blog.


File List
Here is a list of all files with brief descriptions:
[detail level
1
2
]
▼
include
compute.h
Compute
class interface
consts.h
Constants
point.h
Point
class interface
read_data.h
Read_Data
class interface
▼
src
compute.cpp
Implementing the
Compute
interface
main.cpp
point.cpp
Implementing the
Point
interface
read_data.cpp
Implementing the
Compute
interface
Generated by
1.9.1


Factor analysis for single cell data
Table of Contents
Introduction
Suppose we want to fit a linear model with heteroscedastic errors:
\[ y \sim N(X \beta, \Sigma) \]
where \(y\) is \(n \times 1\), \(X\) is \(n \times p\), and \(\Sigma = \mathrm{diag}(\sigma^2_1, \ldots, \sigma^2_n)\).
We can estimate \(\beta\) via weighted least squares:
\[ \hat\beta = (X' W X)^{-1} X' W y \]
where \(W = \Sigma^{-1}\).
Now suppose \(y\) is not Gaussian, but we assume a generalized linear model:
\[ \eta = X \beta \]
\[ E[y \mid x] = \mu = g^{-1}(\eta) \]
In this case, we can estimate \(\beta\) via iterative reweighted least squares (Nelder and Wedderbun 1972).
The key idea is to perform approximate Newton-Raphson updates (by approximating the Hessian). Introduce an auxiliary response:
\[ z = \eta + (y - \mu) \left(\frac{\partial \mu}{\partial \eta}\right) \]
and associated weight:
\[ w = \frac{1}{V[y]} \left(\frac{\partial \mu}{\partial \eta}\right)^2 \]
IRLS consists of repeatedly applying the updates:
- Given \(z, w\), update \(\beta \leftarrow (X' W X)^{-1} X' W z\)
- Given \(\beta\), update \(z, w\)
Can we generalize these ideas to perform PCA/factor analysis (Tipping 1999)? Suppose:
\[ x_i = W z_i + \mu_i + \epsilon_i \]
where \(x_i\) is an observed \(p\)-vector, \(z_i\) is a latent \(q\)-vector, and \(q \ll p\).
If we assume \(i = 1, \ldots, n, z_i \sim N(0, 1), \epsilon_i \sim N(0, \sigma^2)\), then for fixed \(\sigma^2\), the MLE of \(W\) is the the top \(q\) left singular vectors of \(X\). This follows from the fact that maximizing the likelihood is equivalent to minimizing \(\Vert X - W \Vert^2_2\) subject to \(W\) having rank \(q\), and the truncated SVD is the optimal rank \(q\) approximation (Eckhart and Young 1936).
Further, the MAP estimates are (Tipping 1999):
\[ \hat{\mu}_i = \frac{1}{n} \sum_j x_{ij} \]
\[ \hat{\sigma^2} = \frac{1}{p - q} \sum_{j = q + 1}^{p} \lambda_j \]
\[ \hat{W} = U (\Lambda - \sigma^2 I)^{1/2} \]
where \(U, \Lambda\) are the top \(q\) eigenvectors (eigenvalues) of \(X' X\)
If the errors are heteroscedastic, can we generalize the weighted least squares idea to a weighted SVD? Suppose:
\[ X = U D V' + Z + E \]
\[ z_{ij} \sim N(0, s_{ij}^2) \]
\[ e_{ij} \sim N(0, \tau^{-1}) \]
Given \(Z\), the problem becomes PCA of \((X - Z)\) with homoscedastic errors.
Let \(R = X - UDV'\). Then, given \(U, D, V, S, \tau\):
\[ r_{ij} \mid z_{ij} \sim N(r_{ij}, \tau^{-1}) \]
\[ z_{ij} \mid \cdot \sim N(\mu_1, \tau_1^{-1}) \]
\[ \mu_1 = r_{ij} \tau / \tau_1 \]
\[ \tau_1 = \tau + 1 / s_{ij}^2 \]
This idea generalizes the basic iteration in the Soft-Impute algorithm for matrix completion (Mazumder 2010), by representing missing entries as \(s_{ij} = \infty\).
Now suppose the data \(X\) is not Gaussian. Can we generalize IRLS to an iterative reweighted factor analysis, using our weighted SVD? Suppose \(Y\) is the auxiliary response:
- Given \(Y, W\), update \(U, D, V\)
- Given \(U, D, V\), update \(Y, W\)
Methods
Iterative reweighted factor analysis
def wsvd(x, s, n_components, prior_prec=1, max_iters=10, verbose=False): n, p = x.shape z = np.zeros((n, p)) pca = skd.PCA(n_components=n_components) obj = float('-inf') for i in range(max_iters): u, d, vt = pca._fit(x - z) r = x - np.einsum('ij,j,jk->ik', u, d, vt) posterior_prec = prior_prec + 1 / s ** 2 z = r * prior_prec / posterior_prec update = st.norm(scale=np.sqrt(s ** 2 + 1 / prior_prec)).logpdf(r).mean() if verbose: print(f'wsvd [{i}] = {update}') if update < obj or np.isclose(update, obj): return u, d, vt else: obj = update raise RuntimeError('failed to converge') def pois_llik(y, lam): return y * np.log(lam) - lam - sp.gammaln(y + 1) def exp(x): """Numerically safe exp""" return np.exp(np.clip(x, 0, 700)) def pois_svd(x, max_outer_iters=10, verbose=False, **kwargs): mu = x.mean(axis=0, keepdims=True) * np.ones(x.shape) eta = np.log(mu) obj = float('-inf') for i in range(max_outer_iters): y = eta + (x - mu) / mu w = 1 / mu u, d, vt = wsvd(y, w, verbose=verbose, **kwargs) eta = np.einsum('ij,j,jk->ik', u, d, vt) mu = exp(eta) update = pois_llik(x, mu).mean() if verbose: print(f'pois_svd [{i}] = {update}') if update < obj or np.isclose(update, obj): return u, d, vt else: obj = update raise RuntimeError('failed to converge')
Srebro and Jaakkola 2003
Srebro and Jaakola 2003 propose an EM algorithm to solve the weighted low-rank approximation problem:
\[ \min_{\mathbf{Z}} \sum_{i,j} w_{ij} \left(x_{ij} - z_{ij} \right)^2 \]
where target matrix \(\mathbf{X}\) and weight matrix \(\mathbf{W}\) are given, and \(\mathbf{Z}\) is constrained to some rank.
The algorithm is EM in the following sense: suppose the weights \(w_{ij} \in \{0, 1\}\), corresponding to presence/absence, and suppose \(\mathbf{X} = \mathbf{Z} + \mathbf{E}\), where \(\mathbf{Z}\) is low-rank and elements of \(\mathbf{E}\) are Gaussian.
Then, \(E[x_{ij} \mid w_{ij} = 0] = z_{ij}\), naturally giving an EM algorithm. The E-step fills in \(x_{ij}\) with \(z_{ij}\), and the M-step estimates \(\mathbf{Z}\) from the filled in \(\mathbf{X}\). The solution to the M-step is given by the optimal unweighted rank \(k\) approximation, i.e. truncated SVD, because all the non-zero weights are equal to 1.
Conceptually, the method for arbitrary weights is to suppose instead that we have rational \(w_{ij} \in \{0, 1/N, \ldots, 1\}\).
Then, we can reduce this problem to a problem in 0/1 weights by supposing we have \(X^{(k)} = Z + E^{(k)}\), \(k \in 1, \ldots, N\), and each entry is observed in only \(N w_{ij}\) of the \(X^{(k)}\).
Then, the M-step becomes:
\[ \mathbf{Z}^{(t + 1)} = \mathrm{LRA}_k(\mathbf{W} \circ \mathbf{X} + (\mathbf{1} - \mathbf{W}) \circ \mathbf{Z}^{(t)}) \]
where \(\mathrm{LRA}_k\) is the unweighted rank \(k\) approximation and \(\circ\) denotes Hadamard product.
Intuitively, the implied E-step corresponds to taking the expectation of \(z_{ij}^{(k)}\) over the targets \(k\). Clearly, the algorithm generalizes to any weight matrix where \(0 \leq w_{ij} \leq 1\) are stored in finite precision.
def wlra(x, w, rank, max_iters=10, verbose=False): n, p = x.shape low_rank = x pca = skd.PCA(n_components=rank) obj = float('inf') for i in range(max_iters): u, d, vt = pca._fit(w * x + (1 - w) * low_rank) low_rank = np.einsum('ij,j,jk->ik', u, d, vt) update = (w * np.square(x - low_rank)).mean() if verbose: print(f'wsvd [{i}] = {update}') if update > obj or np.isclose(update, obj): return low_rank else: obj = update raise RuntimeError('failed to converge')
Srebro and Jaakkola apply this approach to solve low rank approximation minimizing the logistic loss (where entries are e.g. probability a user will prefer an item).
def logistic_lra(x, rank, max_outer_iters=1000, verbose=False): pass
We extend this approach to instead maximize the Poisson log-likelihood.
\[ \ln p(x \mid \lambda) = l(\lambda) = x \ln \lambda - \lambda + \ln\Gamma(x + 1) \]
Taking a second-order Taylor expansion:
\[ l(\lambda) \approx \left(\frac{x}{\lambda_0} - 1\right)(\lambda - \lambda_0) - \frac{x}{2\lambda_0^2}(\lambda - \lambda_0)^2 + \mathrm{const}\]
where the constant does not depend on \(\lambda\).
\[ l(\lambda) \approx -\frac{x}{2\lambda_0^2} \left[\lambda - \left(1 + \frac{1}{\lambda_0 x}\right)\right]^2 + \mathrm{const}\]
Clearly, minimizing the negative of this objective function for each entry \(x_{ij}\) is a weighted low-rank approximation problem. This result suggests an iterative algorithm, where we take successive Taylor approximations about different parameter estimates for each entry.
def pois_lra(x, n_components, max_outer_iters=10, max_iters=1000, verbose=False): n, p = x.shape lam = x.copy() for i in range(max_outer_iters): w = x / (2 * np.square(lam)) target = 1 + 1 / (lam * x) u, d, vt = srebro_wsvd(target, w, n_components) low_rank = np.einsum('ij,j,jk->ik', u, d, vt) lam = (target - 1) * x update = pois_llik(x, lam).mean() if verbose: print(f'srebro_pois_svd [{i}]: {update}') return lam
First order optimization
Directly optimize the log likelihood via gradient descent:
\[ x_{ij} \sim \mathrm{Poisson}(\lambda_{ij}) \]
\[ \lambda_{ij} = \sum_k L_{ik} F_{kj} \]
For simplicity, don’t put any constraints on \(L, F\).
import torch class PoissonFA(torch.nn.Module): def __init__(self, n_samples, n_features, n_components): super().__init__() self.l = torch.randn([n_samples, n_components], requires_grad=True) self.f = torch.randn([n_components, n_features], requires_grad=True) def forward(self, x): log_lam = torch.matmul(self.l, self.f) return -torch.mean(x * log_lam - torch.exp(log_lam) + sp.gammaln(x + 1)) def fit(self, x, max_epochs=1000, verbose=False, **kwargs): x = torch.tensor(x, dtype=torch.float) opt = torch.optim.Adam([self.l, self.f], **kwargs) for i in range(max_epochs): opt.zero_grad() loss = self.forward(x) if verbose and not i % 100: print(f'Epoch {i} = {loss}') loss.backward() opt.step() return self def pois_fa(x, n_components, **kwargs): n, p = x.shape res = PoissonFA(n, p, n_components).fit(x, max_epochs=2000, lr=5e-2) return res.l.detach().numpy(), np.ones(n_components), res.f.detach().numpy()
Naive factor analysis
The naive approach would be to compute the Poisson MLE \(\hat\lambda_{ij}\) once and then factorize the resulting matrix. But without further assumptions, the MLE is \(\hat\lambda_{ij} = x_{ij}\)
def naive_pois_svd(x, n_components, **kwargs): return skd.PCA(n_components=n_components)._fit(x)
Simulation
Gaussian reconstruction
Reproduce the experiment of Srebro and Jaakkola 2003.
def simulate_gaussian(num_samples, num_features, rank, nsr=1, seed=None): if seed is None: seed = 0 np.random.seed(seed) l = np.random.normal(size=(num_samples, rank)) f = np.random.normal(size=(rank, num_features)) lf = l.dot(f) noise_scale = np.random.uniform(1, nsr, size=(num_samples, num_features)) e = np.random.normal(scale=noise_scale, size=(num_samples, num_features)) x = lf + e return x, lf, noise_scale
Poisson matrix completion
Generate a Poisson data matrix assuming the rate matrix is low rank. Evaluate the quality of the fit using RRMSE.
def simulate_poisson(num_samples, num_features, rank, seed=None): if seed is None: seed = 0 np.random.seed(seed) l = np.random.normal(scale=0.7, size=(num_samples, rank)) f = np.random.normal(scale=0.7, size=(rank, num_features)) lf = l.dot(f) e = np.random.normal(scale=lf.std(), size=(num_samples, num_features)) x = np.random.poisson(lam=np.exp(lf + e)) return x, lf def reconstruct(res): return np.einsum('ij,j,jk->ik', *res) def rrmse(pred, true): return np.sqrt(np.linalg.norm(pred - true) / np.linalg.norm(true))
Test the simulation framework.
x, lf = simulate(num_samples=100, num_features=1000, rank=1, seed=0)
res = pois_svd(x, n_components=1)
rrmse(reconstruct(res), lf)
0.7758305792529097
Compute the naive estimate.
rrmse(reconstruct(naive_pois_svd(x, 1)), lf)
1.1425364246860807
Evaluate the methods systematically.
def evaluate(num_trials=10): result = [] for rank in range(1, 4): for n_components in range(1, 4): for method in (pois_svd, pois_fa, naive_pois_svd): for trial in range(num_trials): try: x, lam = simulate(num_samples=100, num_features=1000, rank=rank, seed=trial) res = method(x, n_components=n_components, max_outer_iters=1000, max_iters=1000) rrmse_ = rrmse(reconstruct(res), lam) llik = pois_llik(x, np.exp(reconstruct(res))).mean() except: rrmse_ = None llik = None result.append((rank, trial, method.__name__, n_components, rrmse_, llik)) result = pd.DataFrame(result) result.columns = ['rank', 'trial', 'method', 'n_components', 'rrmse', 'llik'] return result
result = evaluate(num_trials=5)
Serialize the results.
result.to_csv('pois-svd-simulation.txt.gz', sep='\t', compression='gzip')
Read the results.
result = pd.read_table('pois-svd-simulation.txt.gz', index_col=0)
plt.clf() result[result['rank'] == result['n_components']].boxplot(column='rrmse', by=['rank', 'method'], figsize=(3, 3), grid=False, rot=90) plt.ylabel('Relative RMSE') plt.title('') plt.suptitle('')
Text(0.5,0.98,'')
Does the WSVD reveal the underlying rank?
plt.clf() result[result['method'] == 'pois_svd'].dropna().boxplot(column='llik', by=['rank', 'n_components'], figsize=(3, 5), grid=False, rot=90) plt.ylabel('Per sample log likelihood') plt.yscale('symlog', linthreshy=1e-14) plt.title('') plt.suptitle('')
Text(0.5,0.98,'')
For each data set, how often does the model with number of components equal to the ground truth have the highest likelihood?
(result[result['method'] == 'pois_svd'] .groupby(['rank', 'trial']) .apply(lambda x: x.loc[x['llik'].idxmax, 'n_components']) .reset_index())
rank trial 0 0 1 0 1 1 1 1 1 2 1 2 1 3 1 3 1 4 1 4 1 5 2 0 2 6 2 1 2 7 2 2 3 8 2 3 2 9 2 4 2 10 3 0 3 11 3 1 3 12 3 2 3 13 3 3 3 14 3 4 3
Application to single cell data
What are the latent factors we expect to find in single cell data?
- Unwanted variation
- Cell types/subpopulations
Of these, cell types are of the most interest, because we can then read off the relevant genes from the factors.
To test whether the method recovers cell type, we use known mixtures of sorted PBMCs from 10X Genomics.
b_cells = si.mmread('/project2/mstephens/aksarkar/projects/singlecell-ideas/data/10xgenomics/cd19+_b_cells/filtered_matrices_mex/hg19/matrix.mtx') t_cells = si.mmread('/project2/mstephens/aksarkar/projects/singlecell-ideas/data/10xgenomics/cd8+_cytotoxic_t_cells/filtered_matrices_mex/hg19/matrix.mtx')
genes = pd.read_table('/project2/mstephens/aksarkar/projects/singlecell-ideas/data/10xgenomics/cd19+_b_cells/filtered_matrices_mex/hg19/genes.tsv', header=None)
b_cell_subset = b_cells.tocsc()[:,:500] t_cell_subset = t_cells.tocsc()[:,:500] mix = ss.hstack([b_cell_subset, t_cell_subset], format='csr') keep = (mix.sum(axis=1) > 0).A.ravel() genes = genes.loc[keep] mix = mix[keep].A.T mix /= mix.sum(axis=1, keepdims=True)
res = pois_svd(mix, n_components=10, verbose=True)
2 - 8b2e7d2c-614d-46bb-aaff-4a9a5a4420d0
res0 = skd.PCA(n_components=10).fit(mix)
Y = np.zeros(mix.shape[0]) Y[:mix.shape[0] // 2] = 1 m0 = sklm.LogisticRegressionCV(fit_intercept=True).fit(res0.transform(mix), Y) m0.coef_
array([[ 5.53867438e-04, -1.16538042e-04, 1.97613135e-05, -7.26492033e-06, -8.97671870e-06, 6.80991734e-06, -3.30404299e-06, 1.02224040e-05, -2.31100318e-06, 7.68760237e-07]])
m0.score(res0.transform(mix), Y)
1.0
scaler = skp.StandardScaler() m1 = sklm.LogisticRegressionCV(fit_intercept=True).fit(scaler.fit_transform(mix), Y) m1.score(scaler.transform(mix), Y)
1.0


Articles
2020 Vol 44
Topological Transitions and Tunable Polariton Canalization in Twisted Hyperbolic Surfaces
Mathematics at the speed of light
Beam-steering improvements using agile beam radiating surfaces
Nonlinearity-Driven Broken Degeneracy and Nonreciprocity
2020 Vol 41
Material Characterization in the Microwave Range, When the Materials Become Composite, Reinforced, 3D-Printed, Artificially Mixed, Nanomaterials and Metamaterials
2020 Vol 40
From Kirchhoff Voltages to Maxwell Waves
2020 Vol 39
On the Galerkin Technique for Evaluating the Conductor Loss in Microstrip Reflectarrays
2019 Vol 31
The Demise of the Hundred Year Old Mythology of the Famous Sommerfeld Sign Error Along with a Realization of the Zenneck wave and its relationship with Surface, Lateral and Leaky waves
2018 Vol 30
A Review of the State Space Method for Model-Based Extraction of Electromagnetic Parameters in Radar and Scattering Problems
Agile Beam Radiating Surfaces
2018 Vol 27
DEEP INTEGRATION: Fusing Antennas with Electronics
2018 Vol 26
Review of Modified Algorithms For Synthetic Aperture Radar Imaging at High Squint Angles
2018 Vol 25
Investigation of Modal Characteristics of an Electromagnetic Band Gap Structure Comprised of Metallic Open Rings
2017 Vol 24
Another Field Decomposition for the Transmittance between OAM Antennas
Circular Patch Antenna Design using Swine Influenza (H1N1) Characterized Model based Optimization Technique
Interferometer-Based Amplitude and Phase Calibration for Beam-Forming Systems
2017 Vol 23
On the fundamental bandwidth limits of microwave baluns
Enhanced Focusing and Imaging Based on Parity-Time Symmetry and Nonlocality
2017 Vol 22
Evaluating Microwave Diathermy Results Using Robotic Arm Guided Temperature Measurement System
The Evanescent Plane Wave Solutions of the Maxwell Equations Revisited. Snell Law and Fresnel Coefficients
2017 Vol 21
The Complex Mode Spectrum, and Conjugate Mode Pairs, for Rectangular Waveguides Filled with Biaxially Anisotropic Magneto-dielectric
On the Performance Evaluation of Two Novel Fractional Frequency Reuse Approaches for OFDMA Multi-User Multi-Cellular Networks
TagID generation and detection of Chipless RFID system
2017 Vol 20
Effects of Antenna Radiation on Coherent Back-Scattering from the Ocean Surface
The ARMA Concept: Comparison of AESA and ARMA technologies for agile antenna design
Centre for Wireless Innovation ‘Microwave through Sub-millimetre wave Wireless Technology Research’ Queens University Belfast (UK)
Breaking reciprocity for optical radiation, scattering and absorption
Graphene-based Antennas for Terahertz Systems: A Review
Design of Polarization Reconfigurable Microstrip Antenna with Frequency Tuning
2017 Vol 19
A Review of the Total Field/Scattered Field Technique for the FDTD Method
Coupled Analysis of SAR and Temperature Distributions inside the Human Body by 3D FEM Using Improved Cavity Applicator
Analysis of a Two-Element Array of 1-Dimensional Antennas
Fundamental Limitations on Passive Cloaking, and Beyond
Determinism in Electromagnetic Design & Optimization - Part I: Central Force Optimization
Determinism in Electromagnetic Design & Optimization - Part II: BBP-Derived π fractions for Generating Uniformly Distributed Sampling Points in Global Search and Optimization Algorithms
2016 Vol 18
A Review of Hierarchical Vector Basis Functions for Triangular and Quadrilateral Domains
Complex Coordinate Approaches with Applications to Perfectly Matched and Double Negative Layers
Dispersion Engineered Metamaterial-Based Conformal Leaky-Wave Antennas
A Personal Overview of the Development of Microstrip Patch Antennas
2016 Vol 17
UHF band On-Body Wave Propagations and Compact Array Design
Deep Thermal Therapy System for Osteoarthritis of Knee Joint Using Resonant Cavity Applicator
2016 Vol 16
A Review of Metamaterial based Radiation Pattern Synthesis in Antenna Engineering
Reflectarray antennas: A review
Comments on Babinet’s Principle
Convolution Quadrature and the Time Domain Integral Equations of Electromagnetics
Wearable Technology and Mobile Platform for Human Health Monitoring
Traveling-Wave Antenna Array (TWAA)-a Multioctave Planar Phased Array (MPPA)*
Holographic Implementation of the Optical Theorem
2016 Vol 15
Sub-wavelength imaging without metamaterials
Resonance Effects in Material and Metamaterial Coated Antennas and Resolution of Anomalous Power Radiations
Time Domain Method of Moment (MoM) and Physical Optics (PO) Hybrid Method with Reduced Iterations
A Look at Electromagnetic Field Transformation using Transformation Optics (TO), Wave Equation and Scattering Matrix Formalisms
Antenna Current Optimization using MATLAB and CVX
Color Imaging for Accurate Color
2016 Vol 14
Fast Solution of Multiple Slot-Coupled Waveguide Junctions Using the CBFM
Frequency-Domain and Time-Domain Response Shaping for UWB Antennas
A Review of Implantable Antennas for Wireless Biomedical Devices
Device Classification Performance Modeling Using UWB Stimulated RF-DNA Fingerprinting
Demonstration of Low-cost Ultra-wideband Planar Phased Array Having Multioctave bandwidth, Wide scan, and High efficiency
2016 Vol 13
MIMO Antennas for Mobile Terminals
Finite Element Analysis of Rectangular Waveguide with Stochastic Geometric Variations
Electromagnetic Absorbers Based on Frequency Selective Surfaces
Developments in Directional Modulation Technology
Multilevel Green’s Function Interpolation Method: An Interpolation-based Solver for Efficient Analysis of Large-scale Electromagnetic Problems
2015 Vol 12
Stochastic Dosimetry to manage Uncertainty in Numerical EMF Exposure Assessment
Statistical Analysis of Periodic Structures and Frequency Selective Surfaces using the Polynomial Chaos Expansions
A Fast H-Matrix Based Direct Integral Equation Solver with Optimized H-Partition and Minimized Rank for Large-Scale Electrodynamic Analysis
Characteristics Basis Function Method (CBFM) Applied to Metamaterial Modeling
2015 Vol 11
Notes on Eigen Modal Analysis of Antennas
Energy Patterns of the Prototype-Impulse Radiating Antenna (IRA)
A Review of νFDTD: An Efficient and Accurate Method to Solve Low Frequency, Non-Conformal and Multi-Scale Problems Using FDTD
Developments in Directional Modulation Technology
Electromagnetic simulations for Magnetic Resonance radio frequency coils
2015 Vol 10
Omnidirectional circularly polarized antennas – a small antenna perspective
Fundamentals of Graphene Magnetoplasmons: Principles, Structures and Devices
Performance Enhancement of Microwave Sub-wavelength Imaging and DOA Estimation by Using Signal Processing Techniques
Discontinuous Galerkin Time Domain Methods in Computational Electrodynamics: State of the Art
2015 Vol 9
A Discussion on Reconfigurable and Frequency Agile Planar Antennas
Design of Absorptive Coatings for Arbitrarily Shaped Targets for Reduction of Radar Cross Section (RCS) using an Alternative to the Transformation Optics (TO) Algorithm
LTE/4G Handset Antennas Realized with LDS Technology
A Historical Review of the Absorbing Boundary Conditions for Electromagnetics
2015 Vol 8
A Systematic Approach for Port-Decoupling of Closely Separated Antennas
50 Years of Antenna R&D: Highlights and Some Lessons Learned
Development of Compact Ultra Wideband Antennas
THE SIMPLEST ANTENNAS: RADIATION, RECEPTION AND SCATTERING BY AN ANTENNA IN 1-DIMENSION
2015 Vol 7
A Power Wave Theory of Antennas.
On the Physical Aperture and the Power that Exits a Surface Enclosing a Receiving Antenna
High-Performance Multi-Coil Inductive Power Transmission Links
Multiband, Multiservice, Sensing: Metamaterials Myth and Reality
2014 Vol 6
Hybrid LEGO-EFIE Method Applied to Antenna Problems Comprised of Anisotropic Media
Compact Dual Circularly Polarized “Eleven” Feed over EBG for Reflector Antennas
Design of Large Ground-Based Space-Frame Radomes
A Look at the Wide Spectrum of Wireless Power Transmission
2014 Vol 5
On a Mathematical Theory of Open Metal–Dielectric Waveguides
Volume Integral Equations for Electromagnetic Scattering from Dielectric Objects: Observations and Questions
Classical Method for Deriving the Electromagnetic Propagation Equations for Double Negative Materials with Application for Antenna Design
A Frequency-Modulated Continuous Wave Phased Array Marine Radar System Based on Smart Antenna Technology
2014 Vol 4
Design of Large Finite Arrays Using Simulations or Measurements of Small Arrays
On the Superposition and Elastic Recoil of Electromagnetic Waves.
Optimization Techniques for Electromagnetic Design with Application to Loaded Antenna and Arrays
Volumetric Method of Moments (V-MoM) in Modelling Nanotopologies: A Review
2014 Vol 3
Macro Basis Function Framework for Solving Maxwell’s equations in Surface-Integral-Equation Form
Fast Data Acquisition and Real-Time Processing Techniques for Through-the-Wall Radar Imaging
Electromagnetic Analysis and Circuit Modeling of Ultra-Wideband SPST Switch in 65-nm CMOS Technology
Electromagnetic Field Shielding of a Spherical Shell– Revisited
Integration of Resonant and Non-Resonant Antennas for Coverage of 4G LTE Bands in Handheld Terminals
Antennas for Small Metal-Mountable Passive UHF RFID Tags: Challenges and Advances
2014 Vol 2
Conversion of Whispering Gallery Mode to Dipole Mode
Electromagnetic Absorbers Based on Metamaterial and Plasmonic Devices
Asymptotic Theory of Diffraction by Elongated Bodies
Efficient Analysis of Microwave CircuitsPrinted Antennas and Scattering Problems
Volume Singular Integral Equation Method for Solving Problems of Diffraction of Electromagnetic Waves by a Dielectric Inhomogeneous Body in a Rectangular Waveguide
Radiation Pattern Modeling with Characteristic Basis Function Patterns
Printed Antenna Designs Using Defected Ground Structures
Evolution of Frequency Selective Surfaces
2014 Vol 1
Imaging Using Phase Conjugation Lens Techniques
A Survey of Planar Ultra-WidebndAntenna Designs and Their Applications
Recent Developments in Transformation Optics-aided CEM
Real Time Monitoring of Driver Drowsiness and Alertness by Textile Based Nanosensors and Wireless Communication Platform
Reconfigurable Leaky Wave Antennas
Width-Modulated Microstrip Line Unit Cell A Basic Element for Dispersion Engineered Surfaces for Reflectarray and Holographic Applications
Cloaking and invisibility: A review
Transformation Electromagnetics and Optics
Effect of Turbulence on Wave Propagation in Evaporation Ducts above a Rough Sea Surface
Printed MIMO Antenna Systems Performance Metrics, Implementations and Challenges


Display the dynamic web-maps screensharing stream. Record the mapping process where stakeholders and chimpanzee experts should be able to draw on the shared eastern chimpanzee ranges map new points, lines or polygons along with notes, comments and, if possible, enable a way to provide data, that better capture the latest knowledge of chimpanzee ranges and where the range polygons maps need to be changed:


Gender:
Female
Chest Pain Type:
Atypical Angina
Non-anginal Pain
Asymptotic
Fasting Blood Sugar > 120 mg/dl :
False
Resting ECG :
Having ST-T wave abnormality
Left Ventricular Hyperthrophy
Exercise induced angina :
No
Peak exercise ST segment :
Flat
Downsloping
Thal :
Fixed Defect
Reversable Defect


a
p
o
k
e
l
l
y
p
s
e
about me
projects
odds & ends
home
portfolio
skills & experience
extracurriculars


Chrome DevTools
Josh Thomas /
@jthoms1
When you don't know your tool what do you have?
Panels and Problems
Insights and Answers
Elements
Elements
Network
Sources
Timeline
Profiles
Resources
Audits
Console
Overview:
Inspect/Edit the HTML and CSS of your site.

Elements
HTML
CSS
Tips:
Expand all children:
alt + click
Find by selector:
cmd + f
Computed Style: Identify the winning line
Apply pseudo selector to element
Network
Elements
Network
Sources
Timeline
Profiles
Resources
Audits
Console
Overview:
Identify network issues and test your site's network performance.
Answers:
Why is my ajax data not loading!?
Network
Identify resources downloaded
Get a general timeline and speed of the application
Troubleshoot web service errors
Tips:
Throttling to simulate slower networks
Capture frames of the site during download.
Copy image as base 64 Data URI
Sources
Elements
Network
Sources
Timeline
Profiles
Resources
Audits
Console
Overview:
Debug your JavaScript effectively.
Answers:
What is my variable's value at this line!?
Sources
Breakpoints are your best friend
Stepping your code
Tips:
Prettyify jQuery minified source
Pause on Exceptions
Find source by name:
cmd + o
Timeline
Elements
Network
Sources
Timeline
Profiles
Resources
Audits
Console
Overview:
Gain an overview of your application timeline.
Answers:
Why is my app taking so long to load!?
Timeline
Get a general timeline and speed of the application
Flame chart
Profiles
Elements
Network
Sources
Timeline
Profiles
Resources
Audits
Console
Overview:
Profile your application CPU and memory use.
Answers:
Where is my memory leak coming from!?
Profiles
Record interactions and gain insight
Profile CPU
Identify Memory Allocation
Monitory memory allocation over time
Resources
Elements
Network
Sources
Timeline
Profiles
Resources
Audits
Console
Overview:
Inspect your application's peristent storage.
Answers:
How/Why I am still logged in!?
Resources
Identify specific resources outside of network tab
View persistent storage mechanisms: ie cookies, local storage
Tips:
Clear cookies
Audits
Elements
Network
Sources
Timeline
Profiles
Resources
Audits
Console
Overview:
Get recommendations on performance.
Answers:
How can I make this app faster!?
Audits
Performance Audit of best practices
Very specific recommendations
Console
Elements
Network
Sources
Timeline
Profiles
Resources
Audits
Console
Overview:
Interactive shell for your application.
Answers:
What function just caused my application throw up!?

React DevTools
Device Mode
Tips:
CSS Breakpoints
Emulation
Questions?
https://github.com/jthoms1/techtalk-2015-september
http://discover-devtools.codeschool.com/
https://developers.google.com/web/tools/chrome-devtools/
https://developers.google.com/web/updates/chrome-devtools/
https://medium.com/jotform-form-builder/how-to-use-chrome-devtools-like-a-pro-b9bd414870e3


How the NSA's decrypting practices erodes basic trust
The recent string of revelations about the activities of the NSA can only lead one to the conclusion: we are on the brink of a disaster. The disaster is the crumbling of the backbone of our digital world – the Internet.
Why is it crumbling? Because much of what goes on in the digital world assumes that you can authenticate and identify the entity you are communicating with and that if you use encryption, the information you exchange is safe from prying eyes.
We trust the Internet in large part because we are relatively sure that if, for example, we go to a bank's website and "https" shows up in the browser's address bar, we are in fact attached to and communicating with the bank (not some criminal's fake site). We are also certain that the information we send over the Internet through many series of ISPs, routers and firewalls is only visible to the bank.
If none of this is true then we will have a disaster on our hands. The disaster is that we will be in a digital world where nothing can be trusted.
If it is not intuitively obvious why living in a world without trust is a disaster, consider the following. Why does our society, commerce, transportation, and just about everything in the non-digital world work today? Because we trust it to work.
When you get in a taxi, you trust it will get you to your destination. In a restaurant, you trust the food is not poisoned. From a water faucet, you trust the water is free of cholera or other deadly bacteria.
In the digital world, if we do not trust that we are connected to the bank we think we are communicating with, if we do not trust that our medical records are transferred without disclosure to unknown parties, if we do not trust that our house alarms cannot be turned off remotely by a thief, and if we do not trust that the power grid cannot be shut down by terrorists, then we are living in a digital world where we can trust nothing.
That is a disaster. The consequences of a digital world without trust are not predictable, and they are very possibly catastrophic.
There is a simple reason we are on the verge of this disaster. The reason is that almost all enterprises do not protect and secure the trust that they rely upon in the digital world.
A Ponemon Institute study of the Global 2000 reports that over 50 percent of organizations do not know what type of or how many cryptographic keys and digital certificates they are using to ensure trust across the Internet, nor do they know what policies govern their use. Furthermore, on average each enterprise thinks it has around 17,000 keys and certificates in use, but isn't sure.
The NSA has collected keys and certificates, and reportedly used them to intercept and eavesdrop on the digital world. Uncle Sam has proven that this can be done, even though most people did not think it was possible.
The problem does not end with the NSA, though. Now that everyone knows what the NSA has done, that means criminals know as well. They will follow the NSA's lead and use the same techniques to steal and control anything they want. For enterprises, this means their intellectual property is at risk of being stolen.
The only solution is to protect, secure and control the foundations of trust in the digital world, which means strengthening many systems, including keys and certificates.
It's worrisome that few corporations are taking steps to avoid the disaster of a world without trust.


The role of communication in NGO's is to share information, tell stories, protect the brand's reputation, and engage in conversations that inspire people to join their organization in fulfilling its mission.It helps an NGO strategically focus its communication and outreach efforts around a certain set of goals – usually the mission and objectives of an organization. A communications plan is necessary to help an NGO effectively promote its work in the public and donors eyes.
Charitable people tend to be able to cope with their own problems more easily than those who don't donate. Giving to others improves your self-esteem, self confidence and self worth. This advantage flows into all areas of your life so you will find that you are more confident at work and in social situations
Charity is the act of extending love and kindness to others unconditionally, which is a conscious act but the decision is made by the heart, without expecting a reward. When Charity is carried out selflessly, it is a one-way act where a person gives but asks for nothing in return.


ENID IS SLEEPING A Film Review Copyright Dragan Antulov 1999
Old proverb among show business people says that a comedy is a serious business. Watching the declining quality of American cinematic humour in the last decade, the author of this review tends to agree. The best comedies are those that were made with some serious efforts. One of those is ENID IS SLEEPING, relatively obscure 1989 comedy that succeeds to entertain the audience despite being based on rather outdated idea.
Set in a small New Mexican town of Las Moscas, this film is tale about Enid (Maureen Mueller), woman that has a unique talent to make a life miserable to anyone around her, including her husband Harry (Judge Rheinhold) and her long suffering younger sister Jane (Elizabeth Perkins). After a while, two of them try to seek refuge in each other, but when Enid catches them in flagranti, hell breaks loose. Acting in self-defence, Jane accidentally kills her sister. Luckily, Harry happens to be a cop, so he devises a plan to get rid of the body. As usual, things don't work out as planned, and dead Enid continues to torment Jane and Harry with same ferocity as live one.
Although many viewers would tend to associate this film with WEEKEND AT BERNIE'S, ultimate cinematic disaster dealing with similar theme, this dark situation comedy works beyond its "high concept". This is probably due to the fact that almost anyone involved in the production gave his or her best. Screenwriters A.J. Tipping, Maurice Phillips and James Whaley created solid script, and Phillips as director was superb, both in pacing and wonderful use of New Mexican locations. But the biggest job was done by wonderful cast. Elizabeth Perkins outshines anyone with her adoring portrayal of weak, victimised woman suddenly turned into criminal. Judge Rheinhold (another 1980s comedian whose peak was BEVERLY HILLS COP series) is also very good as her pathetic partner, same as Jeffrey Jones, Brion James and Michael J. Pollard in minor roles. But, probably the most charming element of the film is beautiful, sentimental musical score by Craig Safan that works as some kind of semi-ironic commentary of the events in the movie. Although the film does have somewhat disappointing ending, the end result is really funny and entertaining film.
RATING: 6/10 (++)
Review written on May 8th 1999
-- Dragan Antulov a.k.a. Drax Fido: 2:381/100 E-mail<EMAIL_ADDRESS>E-mail<EMAIL_ADDRESS>E-mail<EMAIL_ADDRESS>The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Warehouse Keeper Norman:
Oh, how was it? The Lord wants us to proceed with the reconstruction project as soon as possible... We must have your help! Go to the Fellmere Harvesting Grounds quickly and bring me the evidence that you eliminated those nasty, vile monsters.


🚢 👇 ⚒
Kapal blubub-blubub noises...
(In human terms, it means under development)
See ya later on the surface! 🏄♂


Jan Vrany<EMAIL_ADDRESS>Abstract: Smalltalk environments are traditionally praised for their debugging features based on runtime reflection. However, some kinds of problems are difficult - if not impossible - to debug using traditional malltalk in-process tools such as debuggers or inspectors. To name some: crashes in external libraries called via faulty runtime of FFI, heap corruption, race conditions. In this talk I'll demonstrate that using system-level tools such as GDB to debug smalltalk may be as easy as using traditional smalltalk in- process debugger. Maybe even easier...
Bio: Jan Vrany is a Smalltalk enthusiast since his university studies. Since the very beginning he's using Smalltalk/X for all his development and research. Computer-wise, his primary interests are programming languages, virtual machines and multi-language programming environments. He obtained his PhD in 2010 from the Czech Technical University in Prague. Now he works as engineer and researcher at Palantir Solutions and CTU FIT.


#include <ScrollerInfo.h>
Public Member Functions | |
| void | fillInfo (ScrollingField *field, Vector minimumHandleSize, Vector horizontalWidgetSize, Vector verticalWidgetSize, int widgetSpacing) |
| Fills the scroller info object that it contains all positions of the widgets, the scroller area, and the handle of both the horizontal and vertical scrollers, if present. | |
| void | fillInfo (ScrollingField *field, Vector minimumHandleSize, Vector horizontalWidgetSize, Vector verticalWidgetSize) |
| Fills the scroller info object that it contains all positions of the widgets, the scroller area, and the handle of both the horizontal and vertical scrollers, if present. | |
| void | fillInfo (ScrollingField *field, Vector minimumHandleSize) |
| Fills the scroller info object that it contains all positions of the widgets, the scroller area, and the handle of both the horizontal and vertical scrollers, if present. | |
| void | fillInfo (ScrollingField *field) |
| Fills the scroller info object that it contains all positions of the widgets, the scroller area, and the handle of both the horizontal and vertical scrollers, if present. | |
| void | fillInfo (ScrollingArea *area, Vector minimumHandleSize, Vector horizontalWidgetSize, Vector verticalWidgetSize, int widgetSpacing) |
| Fills the scroller info object that it contains all positions of the widgets, the scroller area, and the handle of both the horizontal and vertical scrollers, if present. | |
| void | fillInfo (ScrollingArea *area, Vector minimumHandleSize, Vector horizontalWidgetSize, Vector verticalWidgetSize) |
| Fills the scroller info object that it contains all positions of the widgets, the scroller area, and the handle of both the horizontal and vertical scrollers, if present. | |
| void | fillInfo (ScrollingArea *area, Vector minimumHandleSize) |
| Fills the scroller info object that it contains all positions of the widgets, the scroller area, and the handle of both the horizontal and vertical scrollers, if present. | |
| void | fillInfo (ScrollingArea *area) |
| Fills the scroller info object that it contains all positions of the widgets, the scroller area, and the handle of both the horizontal and vertical scrollers, if present. | |
| ScrollerInfo (const ScrollerInfo &info) | |
| Creates a scroller info object from another one. | |
| ScrollerInfo () | |
| Creates an empty scroller info object. | |
Public Attributes | |
| int | horizontalEndX |
| int | horizontalEndY |
| int | horizontalHandleEndX |
| int | horizontalHandleStartX |
| int | horizontalScrollAreaEndX |
| int | horizontalScrollAreaStartX |
| int | horizontalStartX |
| int | horizontalStartY |
| int | verticalEndX |
| int | verticalEndY |
| int | verticalHandleEndY |
| int | verticalHandleStartY |
| int | verticalScrollAreaEndY |
| int | verticalScrollAreaStartY |
| int | verticalStartX |
| int | verticalStartY |
Protected Member Functions | |
| void | fillInfo (int scrollerBreadth, Vector size, bool horizontallyScrollable, bool verticallyScrollable, Vector borderSize, Vector contentSize, Vector contentViewSize, Vector scrollPosition, Vector minimumHandleSize, Vector horizontalWidgetSize, Vector verticalWidgetSize, int widgetSpacing) |
|
|
Creates an empty scroller info object.
|
|
|
Creates a scroller info object from another one.
|
|
|
Fills the scroller info object that it contains all positions of the widgets, the scroller area, and the handle of both the horizontal and vertical scrollers, if present. If both scrollers are present, the bottom right corner is used for the horizontal scroller.
|
|
|
Fills the scroller info object that it contains all positions of the widgets, the scroller area, and the handle of both the horizontal and vertical scrollers, if present. If both scrollers are present, the bottom right corner is used for the horizontal scroller.
|
|
|
Fills the scroller info object that it contains all positions of the widgets, the scroller area, and the handle of both the horizontal and vertical scrollers, if present. If both scrollers are present, the bottom right corner is used for the horizontal scroller.
|
|
|
Fills the scroller info object that it contains all positions of the widgets, the scroller area, and the handle of both the horizontal and vertical scrollers, if present. If both scrollers are present, the bottom right corner is used for the horizontal scroller.
|
|
|
Fills the scroller info object that it contains all positions of the widgets, the scroller area, and the handle of both the horizontal and vertical scrollers, if present. If both scrollers are present, the bottom right corner is used for the horizontal scroller.
|
|
|
Fills the scroller info object that it contains all positions of the widgets, the scroller area, and the handle of both the horizontal and vertical scrollers, if present. If both scrollers are present, the bottom right corner is used for the horizontal scroller.
|
|
|
Fills the scroller info object that it contains all positions of the widgets, the scroller area, and the handle of both the horizontal and vertical scrollers, if present. If both scrollers are present, the bottom right corner is used for the horizontal scroller.
|
|
|
Fills the scroller info object that it contains all positions of the widgets, the scroller area, and the handle of both the horizontal and vertical scrollers, if present. If both scrollers are present, the bottom right corner is used for the horizontal scroller.
|
|
|
|
|
|
Definition at line 37 of file ScrollerInfo.h. |
|
|
Definition at line 39 of file ScrollerInfo.h. |
|
|
Definition at line 41 of file ScrollerInfo.h. |
|
|
Definition at line 43 of file ScrollerInfo.h. |
|
|
Definition at line 45 of file ScrollerInfo.h. |
|
|
Definition at line 47 of file ScrollerInfo.h. |
|
|
Definition at line 49 of file ScrollerInfo.h. |
|
|
Definition at line 51 of file ScrollerInfo.h. |
|
|
Definition at line 53 of file ScrollerInfo.h. |
|
|
Definition at line 55 of file ScrollerInfo.h. |
|
|
Definition at line 57 of file ScrollerInfo.h. |
|
|
Definition at line 59 of file ScrollerInfo.h. |
|
|
Definition at line 61 of file ScrollerInfo.h. |
|
|
Definition at line 63 of file ScrollerInfo.h. |
|
|
Definition at line 65 of file ScrollerInfo.h. |
|
|
Definition at line 67 of file ScrollerInfo.h. |


It is demo site and all data is fake. Do not enter real account information or SSNs.
Home
Logout
Profile Complete
Thank you {{.UserName}}, your profile is complete.
Full Name:
Dr. Borat Sogdiyev
Residential Address:
02-123 Main St, Providence, RII 02905 USA
SSN Ref No:
{{.VaultID}}
Mobile Phone No:
(401) 555-0999
Email
{{.UserName}}


| Home | Messages | Classes | Class XRef |
The subclasses of the class Dictionary are used to manage a set of names that return related objects. Dictionary classes do not have instances. All the messages defined for a particular Dictionary usually return objects of the same class. Operationally, a Dictionary is similar to the class IndexedList except that the index values are String objects when you work with a Dictionary.
The Dictionary class is a direct subclass of Object:
Object
|
Dictionary
|
|-- Environment
|
|-- LocalDBDictionary
|
|-- Named
|
|-- SystemDictionary
|
|-- XRef
To create a new Dictionary, use:
!newDictionary <- Dictionary new ;Initially the Dictionary is empty. You add objects to the dictionary by providing a name for referencing the object. For example, you can create a dictionary to translate externally defined codes into descriptive names using:
!Lookups <- Dictionary new ; Lookups at: "USA" put: "United States of America" ; Lookups at: "CAN" put: "Canada" ;The variable Lookups is defined to be a new Dictionary object. The at: id put: object message is used to associate an id in the dictionary with a specific object. In this example, the name USA is associated with the String object "United States of America" and the name CAN is associated with the String object "Canada". The at: id message is used to access the object associated with the specific id. For example:
Lookups at: "USA"returns the String "United States of America" and
Lookups at: "CAN"returns the String "Canada".
Any type of object can be associated with an identifier in a Dictionary. The following example creates a new class and several instances and uses a Dictionary to keep track of the instances by name:
#- Create a new Class !Industry <- Object createSubclass ; #- Define a Property at the Class Industry define: 'name' ; #- Create new Instances !autos <- Industry createInstance ; autos :name <- "Automotive" ; !tech <- Industry createInstance ; tech :name <- "Technology" ; #- Create a Dictionary to Reference Instances !LookupIndustry <- Dictionary new ; LookupIndustry at: "autos" put: autos ; LookupIndustry at: "tech" put: tech ;The expression:
LookupIndustry at: "autos"returns the instance of the class Industry representing the automotive industry. Since the object returned is the actual Industry object which responds to the name message, the expression:
LookupIndustry at: "autos" . namereturns the name of this industry, in this case the String "Automotive". You can add several identifiers to the Dictionary that all return the same object. For example:
LookupIndustry at: "cars" put: (LookupIndustry at: "autos")adds the name cars to the Dictionary and defines it to return the industry object representing the automotive industry. The expressions:
LookupIndustry at: "autos" and LookupIndustry at: "cars"produce identical results.
The message displayMessages can be used to see all the names in a Dictionary. For example:
LookupIndustry displayMessagesdisplays the names autos, cars, and tech.
If there is no object associated with the supplied identifier, the value NA is returned. For example:
LookupIndustry at: "xyz"returns the value NA. The message uniformAt: id will return the object named Default in the Dictionary if the original name is not found. If no object named Default is found either, the value NA is returned. For example, add the name Default to the Dictionary to return the default Industry instance:
LookupIndustry at: "Default" put: Industry ; then: LookupIndustry uniformAt: "xyz"returns the object representing the default Industry since the id xyz is not found in the dictionary.
The delete: message can be used to delete an entry from a Dictionary. For example:
LookupIndustry delete: "cars" ;deletes this entry from the dictionary. The expression:
LookupIndustry at: "cars"will now return the value NA. Note that the expression:
LookupIndustry at: "autos"will continue to return the industry object because the delete: message at Dictionary just deletes the reference from the Dictionary to the object but does not actually delete the object itself.
Internally, the at: message defines the supplied name as a class constant. The expression:
Dictionary at: "test" put: "this is a test"is equivalent to:
Dictionary define: 'test' toBe: "this is a test"The expressions:
Dictionary at: "test"is therefore equivalent to:
Dictionary testNote that if the identifier does not start with a letter or the _ character or if it contains any special characters, you need to use the \ (escape) character to precede the name (and each special character within the name). In these cases, it is often easier to use the at: form of the lookup. For example, if you added a multi-word identifier using:
Dictionary at: "this is a long identifier" put: "answer"then the expressions:
Dictionary at: "this is a long identifier" and Dictionary this\ is\ a\ long\ identifierboth return the String "answer". In this case, the version using at: is probably simpler to read.
Additional information on valid identifiers is available.
The subclass Named is used to organize Dictionary classes that are used for naming instances of the different Entity subclasses. To avoid conflicting names across classes, a separate naming dictionary has been defined for each Entity subclass. For example, the company General Motors and the common stock security of General Motors would represent distinct objects in a Company and Security class. The name GM would be added to the dictionaries Named Company and Named Security. The expression:
Named Company at: "GM" . or Named Company GMreturns the Company instance representing General Motors and the expression:
Named Security at: "GM" . or Named Security GMreturns the Security instance representing General Motors common stock.
To display the set of naming dictionaries that have been defined, use the expression:
Named displayMessages
When a new entity subclass is created using the createSubclass: id message, a new naming dictionary is automatically defined at the class Named using the same identifier. For example, the expression:
Entity createSubclass: "Industry" ;creates the new subclass Industry and the new naming dictionary Named Industry. The Default identifier is automatically added to this naming dictionary to return the default instance in the new Entity class. The expressions:
Named Industry at: "Default" and Named Industry Defaultwill therefore return the default Industry instance. The expression:
Named Industry uniformAt: "xyz"will return the default Industry if the identifier xyz has not been defined. When a new instance of an entity class is created using the createInstance: id message, the id is automatically added to the class naming dictionary, returning the newly created instance. For example, the expression:
Industry createInstance: "Auto" ;create a new instance of the Industry class and adds the name Auto to the Named Industry Dictionary. The expressions:
Named Industry at: "Auto" and Named Industry Autowill therefore return the Industry instance representing the automotive industry.
The naming dictionaries defined for entity classes provides a useful way to track one or more standard aliases for an instance. It is often useful to track aliases for an entity that may be uniquely assigned by a specific source but which may overlap with aliases assigned by other sources. For example, two sources may supply currency information using different coding schemes. These schemes will not necessarily match the scheme used by your installation. To address this situation, a separate cross reference dictionary is set up to store the relationship between a specific alternative source's code and the actual entity instance.
The class XRef is a subclass of Dictionary and is used to store these cross references. The message createXRef: withProperty: is used to create a new XRef dictionary for a specific entity subclass. The first parameter is the name of the XRef dictionary and the second is the name of a property at the entity class that will store the cross reference values. For example, to create a currency cross reference to track Source1 currency codes use:
Currency createXRef: "Source1" withProperty: "source1Code" ;This message performs the following steps:
To obtain a list of the XRef instances defined for a class, use the expression:
entityClass XRef displayMessagesFor example:
Currency XRef displayMessagesreturns the names of all the Currency XRef dictionaries that have been created for the Currency class.
The message setXRefIn: xref to: id is used to add or change XRef values for a specific entity. For example, if Source1's code for the US currency is 1, use the expression:
Named Currency US setXRefIn: Currency XRef Source1 to: "1" ;This expression adds the id 1 to the XRef and sets the value of the "source1Code" property for currency US to "1". The expression:
Currency XRef Source1 at: "1" .returns the US currency instance. The expressions:
Currency XRef Source1 at: "1" . Currency XRef Source1 \1 and Named Currency USall return the same instance.
Each XRef is associated with a specific property. For example, Currency XRef Source1 is associated with the property source1Code at the class Currency. The message updateBlock defines a block that returns the property associated with a particular XRef. For example:
Currency XRef Source1 updateBlockreturns:
[ :source1Code ]and the expression:
Named Currency US source1Codereturns the value 1.
The message profile is defined at XRef to display the cross reference values defined in this XRef for all entities. For example, the expression:
Currency XRef Source1 profiledisplays:
Currency XRef Source1 For Item: [:source1Code] Code Name XRef Value . . . US U.S. Dollar : 1 / . . .Any number of aliases can be defined. If Source1 also uses the code "USA1" for the US currency, then you can set and use either alias. For example:
Named Currency US setXRefIn: Currency XRef Source1 to: "USA1" ; Currency XRef Source1 profile ;produces:
Currency XRef Source1 For Item: [:source1Code] Code Name XRef Value . . . US U.S. Dollar : 1 / USA1 / . . .The default profile message defined for the Entity class displays the value defined for each XRef property defined for the class. For example, the expression:
Named Currency US profileproduces:
*** Currency Profile For: US Dollars Code: US Aliases: US / --- Links --- --- XRefs --- source1Code: USA1
The subclass SystemDictionary is used to organize Dictionary classes that are supplied with the core Vision system and various optional ToolKits. The dictionary SystemDictionary UpperCaseDictionary is used to store the upper case equivalents of the letters 'a' through 'z'. This Dictionary was created using:
SystemDictionary newAs: "UpperCaseDictionary" ; SystemDictionary UpperCaseDictionary at: "a" put: "A" . at: "b" put: "B" . at: "c" put: "C" . ;The message capitalize is defined at the class String to use this dictionary to translate the first letter of a string to its capitalized equivalent. The dictionary SystemDictionary LowerCaseDictionary is defined in a similar way and is used to store the lower case equivalents of the letters 'A' through 'Z'.
Note that the newAs: message has been defined at Dictionary to name the new dictionary in the dictionary's parent dictionary. The expression:
SystemDictionary newAs: "Test"creates a new dictionary and automatically defines the message Test at the class SystemDictionary to return it. The expression:
SystemDictionary Testreturns this new dictionary instance.
| Copyright © 1997 Innovative Systems Techniques, Inc. | Updated June 19, 1997 |


I am called Louise Demarillac Izere,I live in Gisenyi and am a highschool graduate super excited to be studying about coding at Moringa school.
Despite growing up with little access to technological devices,I always wanted to know how computers and different online platforms worked and dreamed that one day I will create my own platform, that made me choose to study computer science in my A-level.
When I heard about the WeCode program at Moringa school ,I knew that it was the perfect opportunity to help me gain proffesional skills and finally make my dreams come true.
Apart from being passionate about coding,I like music,watching and reading thrillers and swimming.
I also enjoy going outdoors to enjoy the nature on a bike.
Thanks to WeCode Program , My web development skills have reached on an a great level
this is my current progress:
However, I am a forever learner and I enjoy learning new things everyday,
to help me keep track with the world that never stops changing.
This is a compilation of some of the projects I have worked on so far


A | |
| abs_i [Interval2] |
Interval absolute value (optimal)
|
| abs_i [Interval1] |
Interval absolute value
|
| add_di [Interval2] |
Addition of a number and an interval (optimal)
|
| add_di [Interval1] |
Addition of a number and an interval
|
| add_id [Interval2] |
Addition of an interval and a number (optimal)
|
| add_id [Interval1] |
Addition of an interval and a number
|
| add_ii [Interval2] |
Interval addition (optimal)
|
| add_ii [Interval1] |
Interval addition
|
| atan_i [Interval2] |
Interval arctangent.
|
| atan_i [Interval1] |
Interval arctangent.
|
C | |
| cos_i [Interval2] |
Interval cosine (not implemented yet)
|
| cos_i [Interval1] |
Interval cosine (not implemented yet)
|
D | |
| div_di [Interval2] |
Division of a number by an interval (optimal)
|
| div_di [Interval1] |
Division of a number by an interval
|
| div_id [Interval2] |
Division of an interval by a number (optimal)
|
| div_id [Interval1] |
Division of an interval by a number
|
| div_ii [Interval2] |
Interval division (optimal)
|
| div_ii [Interval1] |
Interval division
|
E | |
| empty_interval [Interval2] |
The empty interval
|
| empty_interval [Interval1] |
The empty interval
|
| entire_interval [Interval2] |
The entire interval representing (-infinity, infinity)
|
| entire_interval [Interval1] |
The entire interval representing (-infinity, infinity)
|
| exp_i [Interval2] |
Interval exponential function.
|
| exp_i [Interval1] |
Interval exponential function.
|
F | |
| fadd_high [Interval2] |
Returns an upper bound of the sum of two floating-point numbers (optimal)
|
| fadd_high [Interval1] |
Returns an upper bound of the sum of two floating-point numbers
|
| fadd_low [Interval2] |
Returns a lower bound of the sum of two floating-point numbers (optimal)
|
| fadd_low [Interval1] |
Returns a lower bound of the sum of two floating-point numbers
|
| fatan_high [Interval2] |
Returns an upper bound of
atan x
|
| fatan_high [Interval1] |
Returns an upper bound of
atan x
|
| fatan_low [Interval2] |
Returns a lower bound of
atan x
|
| fatan_low [Interval1] |
Returns a lower bound of
atan x
|
| fcos_high [Interval1] |
Returns an upper bound of
cos x
|
| fcos_low [Interval1] |
Return a lower bound of
cos x
|
| fdiv_high [Interval2] |
Returns an upper bound of the ratio of two floating-point numbers
(optimal)
|
| fdiv_high [Interval1] |
Returns an upper bound of the ratio of two floating-point numbers
|
| fdiv_low [Interval2] |
Returns a lower bound of the ratio of two floating-point numbers
(optimal)
|
| fdiv_low [Interval1] |
Returns a lower bound of the ratio of two floating-point numbers
|
| fexp_high [Interval2] |
Returns an upper bound of
exp x
|
| fexp_high [Interval1] |
Returns an upper bound of
exp x
|
| fexp_low [Interval2] |
Returns a lower bound of
exp x
|
| fexp_low [Interval1] |
Returns a lower bound of
exp x
|
| flog_high [Interval2] |
Returns an upper bound of
log x
|
| flog_high [Interval1] |
Returns an upper bound of
log x
|
| flog_low [Interval2] |
Returns a lower bound of
log x
|
| flog_low [Interval1] |
Returns a lower bound of
log x
|
| fmul_high [Interval2] |
Returns an upper bound of the product of two floating-point
numbers (optimal)
|
| fmul_high [Interval1] |
Returns an upper bound of the product of two floating-point numbers
|
| fmul_low [Interval2] |
Returns a lower bound of the product of two floating-point numbers
(optimal)
|
| fmul_low [Interval1] |
Returns a lower bound of the product of two floating-point numbers
|
| fpown_high [Interval2] |
Returns an upper bound of
x^n
|
| fpown_high [Interval1] |
Returns an upper bound of
x^n
|
| fpown_low [Interval2] |
Returns a lower bound of
x^n
|
| fpown_low [Interval1] |
Returns a lower bound of
x^n
|
| fpred [Interval2] |
Computes a predecessor of a floating-point number (optimal)
|
| fpred [Interval1] |
Computes a predecessor of a floating-point number
|
| fsin_high [Interval1] |
Returns an upper bound of
sin x
|
| fsin_low [Interval1] |
Returns a lower bound of
sin x
|
| fsqr_high [Interval2] |
Returns an upper bound of
x^2 (optimal)
|
| fsqr_high [Interval1] |
Returns an upper bound of
x^2
|
| fsqr_low [Interval2] |
Returns a lower bound of
x^2 (optimal)
|
| fsqr_low [Interval1] |
Returns a lower bound of
x^2
|
| fsqrt_high [Interval2] |
Returns an upper bound of
sqrt x (optimal)
|
| fsqrt_high [Interval1] |
Returns an upper bound of
sqrt x
|
| fsqrt_low [Interval2] |
Returns a lower bound of
sqrt x (optimal)
|
| fsqrt_low [Interval1] |
Returns a lower bound of
sqrt x
|
| fsub_high [Interval2] |
Returns an upper bound of the difference of two floating-point
numbers (optimal)
|
| fsub_high [Interval1] |
Returns an upper bound of the difference of two floating-point numbers
|
| fsub_low [Interval2] |
Returns a lower bound of the difference of two floating-point
numbers (optimal)
|
| fsub_low [Interval1] |
Returns a lower bound of the difference of two floating-point numbers
|
| fsucc [Interval2] |
Computes a successor of a floating-point number (optimal)
|
| fsucc [Interval1] |
Computes a successor of a floating-point number
|
I | |
| inv_i [Interval2] |
Interval reciprocal (optimal)
|
| inv_i [Interval1] |
Interval reciprocal
|
| is_empty [Interval2] |
Tests if an interval is empty
|
| is_empty [Interval1] |
Tests if an interval is empty
|
| is_entire [Interval2] |
Tests if an interval is the entire interval
|
| is_entire [Interval1] |
Tests if an interval is the entire interval
|
| is_valid [Interval2] |
Tests if an interval is valid.
|
| is_valid [Interval1] |
Tests if an interval is valid.
|
L | |
| log_i [Interval2] |
Interval natural logarithm.
|
| log_i [Interval1] |
Interval natural logarithm.
|
M | |
| make_interval [Interval2] |
Creates an interval from given endpoints
|
| make_interval [Interval1] |
Creates an interval from given endpoints
|
| max_ii [Interval2] |
Interval maximum (optimal)
|
| max_ii [Interval1] |
Interval maximum
|
| mid_i [Interval2] |
Computes a midpoint of an interval.
|
| mid_i [Interval1] |
Computes a midpoint of an interval.
|
| mid_i_fast [Interval1] |
Computes a midpoint of an interval as
(a + b) / 2 .
|
| min_ii [Interval2] |
Interval minimum (optimal)
|
| min_ii [Interval1] |
Interval minimum
|
| mul_di [Interval2] |
Multiplication of a number and an interval (optimal)
|
| mul_di [Interval1] |
Multiplication of a number and an interval
|
| mul_id [Interval2] |
Multiplication of an interval and a number (optimal)
|
| mul_id [Interval1] |
Multiplication of an interval and a number
|
| mul_ii [Interval2] |
Interval multiplication (optimal)
|
| mul_ii [Interval1] |
Interval multiplication
|
N | |
| neg_i [Interval2] |
Interval negation (optimal)
|
| neg_i [Interval1] |
Interval negation
|
O | |
| one_interval [Interval2] | [1., 1.]
|
| one_interval [Interval1] | [1., 1.]
|
P | |
| pown_i [Interval2] |
Interval integer power.
|
| pown_i [Interval1] |
Interval integer power
|
S | |
| sin_i [Interval2] |
Interval sine (not implemented yet)
|
| sin_i [Interval1] |
Interval sine (not implemented yet)
|
| sqr_i [Interval2] |
Interval square (optimal)
|
| sqr_i [Interval1] |
Interval square
|
| sqrt_i [Interval2] |
Interval square root (optimal)
|
| sqrt_i [Interval1] |
Interval square root
|
| sub_di [Interval2] |
Subtraction of a number and an interval (optimal)
|
| sub_di [Interval1] |
Subtraction of a number and an interval
|
| sub_id [Interval2] |
Subtraction of an interval and a number (optimal)
|
| sub_id [Interval1] |
Subtraction of an interval and a number
|
| sub_ii [Interval2] |
Interval subtraction (optimal)
|
| sub_ii [Interval1] |
Interval subtraction
|
Z | |
| zero_interval [Interval2] | [0., 0.]
|
| zero_interval [Interval1] | [0., 0.]
|


It is not that we have a short time to live, but that we waste a lot of it. ~Seneca
It is not that we have a short time to live, but that we waste a lot of it.


AnimationManager.h
| void |
setActualAnimation (yen::AnimationManipulator)
Set atcual animation. |
| void |
addAnimation (yen::AnimationManipulator)
Adds new animation. |
| void |
removeAnimation (yen::AnimationManipulator)
Removes animation from manager. |
| yen::Frame* |
getActualFrame ()
Returns pointer to actualy played frame. |
| void |
setResourcesUsed ()
Setts "used" flag for all resources used by manager. |
| void |
start ()
Plays actual animation. |
| void |
pause ()
Pause actual animation. |
This class is used by Graphics Component for manage animations.
Method sets animation actualy played by manager (Animation have to be added first).
Arguments:
Method adds animation resource to animations used by manager.
Arguments:
Throws:
Method removes animation resource from animations used by manager.
Arguments:
Throws:


MODALITY AND SELF REFERENCE
by
_Gunnar Wayne Niemi
A dissertation submitted in partial fulfillment of the requirements for the degree of Dector of Philosophy in The University of Michigan 1970
Doctoral Committee:
Professor Arthur W. Burks, Chairman Professor William P. Alston Associate Professor Lawrence Sklar Assistant Professor Peter G. Hinman


| DEEKAY AGENCIES |
| Pavani Prestige Apartment, 24-7-14, GROUND FLOOR, | ................ | |
| opposite to CELEBRATIONS HOTEL, Magunta Layout, |
| Nellore, Andhra Pradesh 524003 |
| . |
| . |
| 83338 68789 |
| . |
|
|
|
|
| Sri Krishna Godavari Gas Agencies |
| 19-9-3/G, | ................ | |
| Old Tirucahnoor Road, |
| Tirupati, Andhra Pradesh 517501 |
| . |
| . |
| 96666 53907 |
| . |
|
|
|
|