Delayed Iranian Applications Update – UCalgary HR and ISS

After meeting with Susan Parker, the vice provost of the student experience at the University of Calgary, and Brianna (Bree) Huene from International Student Services, the university announced a presentation on immigration topics for Iranian students and postdocs. About 70 people signed up for the meeting and at least 50 people showed up. The meeting was held on July 4th, 2018, in ST 140, at UofC main campus.

Previously, in the first meeting we had discussed things about

  1. Running a survey by the university to collect more thorough info
  2. Talking to the governors, MP’s, etc to raise the issue
  3. Talking to the provincial government to help ease some of the troubles in the meantime:
    1. Health care card renewal
    2. Driving license extension
    3. etc.
  4. Writing to the federal government and asking for the issue to be resolved.
  5. The message the university is sending to departments regarding hiring Iranian students needs to be fixed.

In this meeting the presenters were:

  • Brianna (Bree) Huene, RCIC, intl student immigration specialist
  • Mayda Borbely, RISIA, intl student services assistant
  • Catherine Sun, RCIC, Consultant, immigration
  • Carlina Bamforth, RCIC, Consultant, immigration

Other people in attendance were:

  • Susan Barker, vice provost of student experience (opened the meeting and then left)
  • Casey Blais, from UToday
  • about 50 Iranian graduate students and postdocs

Overall, the presentations were general information about immigration (temporary and permanent) with some question and answers, mostly aimed at students. There were a few topics about the delays, in bold fonts below.

What was discussed:


University is aware of the problems, including the president and provost
The problem is complicated
We want to raise awareness in the community
UofC will do an institutional survey
Raise the issue with the provincial and federal government
There is a gap in reaching out to undergrads etc, please tell us what else we could do


The government claims the delays are in the security checks
We’re working to help raise awareness in the community


Resources available at UofC for international students
Drop any time at the office
Q: Does this extend to non-students? HR will tell you


Study permits, renewal process
Post-grad work permits, application, renewal
If there are delays with study permit etc, go see Bree so that they can work on it


Government gave the same answer about work permit delays
Postdocs qualify for expedited processing, it wasn’t very successful, depends on the officer, it should take 2 weeks.
Q: Something about A4, trainee, and not being a job
Q: The NOC does not match our job as we don’t teach, makes it a trainee
A person that has an open work permit does not need a LMIA


Bridging open work permit
Q: do the benefits extend over the implied status?


For a temporary resident visa:

  • Apply VERY EARLY (this was Bree’s advice)
  • Include a letter of explanation that why you are applying so early
  • Include your CV and that letter of information at the beginning

Q: the IRCC has not been responsive and that causes issues. -> survey
Nicole every months gives information about PR application and one on one sessions


Driving licence in alberta can be extended
Alberta health card can be extended for 90 days, in her case they did re-extended it too
SIN doesn’t extend


Family need to apply at the same time of the main applicant, separately
Urgently leaving Canada without a valid Canadian visa:
Only to USA with a valid study/work permit
Aleberta temporary worker advisory

Casey ran a quick interview with me, and he was given the results of the survey, and I emailed him some of the news coverage, and some of the tweets and links of other things happened so far. He will write a story for UToday.

Bree will work with me to design and run a more informative survey regarding the impact this has had on UofC affiliates.


A missed point

You call a company to book an appointment for their service,

The line is busy,

Machine asks you to leave your name and phone number for them to call you back,

You do so,

And meanwhile waiting for them to call you back,

You call another company to book an appointment for the same service,

And you book it,

The first company calls you back an hour later,

You tell them:

“Oh, I’ve booked an appointment with another company, thank you for calling me back, bye”,

The company does an analysis on the callbacks they’ve made,

Majority of the potential customers were like you,

They decide to stop the callback service.

“How’s everybody doing?”

One of the things I’m always told by my colleagues who visit my classes is that I’m dry, serious, and even scary, and that’s not how they know me outside classroom. So, I’ve been working on different strategies I can use in my classes to make appear more friendly and more approachable in the first sight, even though my students learn that I am, during the semester. Aside from jokes, chitchat, and other small things, my students have shown a great interest in me asking them how they are doing that day, at the beginning of each class. I remember I was going to this dance class and from the very first day the instructor asked: “how’s everyone doing?”, then faced with a quite response, he asked it again and with more energy, the response was much louder this time, but he asked one more time and the class responded in unison and as loud as possible. That already had put all of us in a position that considered ourselves “there”. We were there to learn something and we had to respond. This kept happening everyday and also in a few other occasions when he asked if we’ve learned something or not. So I decided to do the same in my next course. Surprisingly, several students commented on this approach and said that it made the class atmosphere so much more friendlier at the beginning of each day of class. I think I can extend this so much more and learn a few lessons from it.

Brain networks and the hiking trails

In the neuroscience community there’s a divide on whether there are functional connectivity networks in the brain. This is a very vaguely defined concept, although, one can think of it this way:


Imagine a mountain with several points of interest, places that people are interested in visiting for whatever reason. There are some spots at the bottom of the mountain that people get to the mountain, and start hiking up. If there’s a trail from where they start to where they wanna go, most people will take the trail. The trails define a physical network between various points of the mountain. The daily traffic defines a temporal dynamic network that evolves continuously. It is clear that the physical network of trails is a great indicator of the traffic network. That is, most of the traffic is on the trails.


On the other hand, from time to time there are people who want to explore other things, who want to take a shortcut, or maybe they just get lost; they take paths that are not a trail. These paths are often ignored, since there are nothing important or exciting about them. But there are times that someone takes a new path and finds something interesting, maybe a shorter way to get to another point or a more scenic way which is even longer, maybe there’s a waterfall along the path, maybe it is to a new unexplored area. As more and more people start walking on that path, the grass gets flattened, the vegetation changes and it slowly starts to becoming a trail. While this might cause some other existing trails become obscure and flowers and grass start growing on them and the trail goes away, like it never existed. The traffic network slowly changes the physical network.


The physical network of trails in the mountain are like the neurons being connected to each other via dendrites and axons. Neurons send electrical charges to each other throughout this network, but the charges can sometimes be transmitted via leakage, or other medium. The charges being sent are the people travelling on and off trails. The physical network is called the structural network and the traffic network is one of the instances of a network that some people refer to it as a functional network. Connecting every single pair of points in a mountain to each other via a straight (geodesic) line might make the travels faster and more efficient in terms of time, but it destroys the mountain, it is costly, and most of the trails will remain unused (and probably fade away) as some paths become more popular to travel. Hence, the question that what network is more likely to evolve as the structural network of the brain to get the transmissions done in a timely fashion but also to keep the number of connections to a minimum is an optimization problem that involves two competing parameters to be balanced out.


Picture from the amazing 2009 review paper by Bullmore and Sporns: Complex Brain Networks: Graph Theoretical Analysis of Structural and Functional Systems published in Nature Reviews Neuroscience, 10, 186-198.

This has brought up a lot of questions and experiments with small world graphs, scale free graphs, and even Ramanujan graphs and expanders. One of the best references out there written by one of the most active people in the field is “Networks of the Brain” by Olaf Sporns. And here is a review paper that explains the current (2013) state of the art on the topic. Check them out.

Playing catch with Poison

My friend asked me this: Put balls into n buckets uniformly at random and count h the number of buckets with at least one ball in them. What is the expected value of number of balls k?

Let me do this differently. First the direct questions: Divide a square into n smaller equal squares, and pick k points in the big square uniformly at random. On average how many little squares have at least a point in them?

Here is a little sage demo and a sample output

def random_balls_in_buckets(np,ns,verbose=0):
    #np = number of points
    #ns = number of subdivisions of each side of the square
    P = [(random(),random()) for i in range(np)] #chose the random points
    plot_points = points(P,size=20,color='red')
    plot_lines = [line([(0,i/ns),(1,i/ns)]) for i in range(ns)]+[line([(i/ns,0),(i/ns,1)]) for i in range(ns)]+[line([(0,1),(1,1)]),line([(1,0),(1,1)])]
    A = matrix(ZZ,ns,ns)
    for p in P:
        i = floor(ns * p[0])
        j = floor(ns * p[1])
        A[i,j] = 1
    nb = sum(sum(A))
    if verbose == 1:
        text_plot1 = text("number of balls:", (.49,1.1), horizontal_alignment='right', color='red')
        text_plot2 = text(str(np), (.51,1.1), horizontal_alignment='left', color='red')
        text_plot3 = text("number of buckets:", (.49,1.05), horizontal_alignment='right', color='blue')
        text_plot4 = text(str(nb), (.51,1.05), horizontal_alignment='left', color='blue')

np = 200 #number of points
ns = 10 #number of subdivisions of each side of the square


The number of buckets without any balls in them follows the Poison distribution with \lambda = \frac{k}{n}, and parameter 0. We want to count the number of non-empty buckets which will then be h = n (1 - e^{-\frac{k}{n}}). So, in order to guess how many balls where there if h buckets are non-empty, all I need to do is to solve the above equation for k, which will tell me k = -n \ln(1-\frac{h}{n}). For example, if I have 87 non-empty buckets out of a total of 100 buckets, then I have thrown approximately 204 balls.

So, if I repeat the above experiment 1000 times,

#let's try this a few times
nB = [] #list of number of hit buckets for each trial
n = 1000
for i in range(n):
    nB += [random_balls_in_buckets(np,ns,verbpse=0)]

P = [(i,nB[i]) for i in range(n)]
histogram = points(P,title='average: '+str(float(mean(nB))), axes_labels=['trial number','number of hit buckets'])

then I’ll get


One natural question to ask is how many balls shall we throw to be 95% certain that 50% of the buckets are hit? I don’t remember my confidence intervals, but a numerical experiment shows:

ns = 10 #number of subdivisions of each side of the square
nB = [] #list of number of buckets for each trial
n = 1000 #number of points
for np in range(n):
    nB += [random_balls_in_buckets(np,ns,verbpse=0)]

P = [(i,nB[i]) for i in range(n)]
histogram = points(P,title='average: '+str(float(mean(nB))), axes_labels=['number of balls','number of hit buckets'])
curve = plot(ns^2 * (1-exp(-k/ns^2)) ,(k,0,1000),color='red',thickness=3)

100bucketsupto1000balls.pngOf course the red curve is h = n (1-e^{-\frac{k}{n}}).

What do you do when you are a bullied academic?

This past summer I was given a course in introductory linear algebra to teach. The topics of the course, as usual, start from solving systems of linear equations, and then matrices, determinant and some matrix algebra, then moved to some topics in geometry of \mathbb{R}^n, linear transformations, complex numbers, and ended with eigen-things and applications like Markov precesses, and an intro to dynamical systems.

To my surprise, nowhere in the syllabus was a hint of vector spaces, linear independence, basis etc. After I proposed to the course coordinator that I shall talk about these topics, at least to make my own life easier when I’m teaching eigenvectors etc, Claude Laflamme, who I thought was the coordinator of the course, told me I shall not (cannot) do that, and provided no specific reasons.

Then came the textbook, which is an “open” text from a company called “lyryx”. After reviewing the text, I went back to Claude Laflamme, and told him that I want to change the textbook to Gilber Strang’s introduction to linear algebra, as I see no benefit in having students reading the lyryx’s textbook. He insisted that the department insists on using “free” and “open source” books. Later I discovered that in the same semester the calculus had moved from the lyryx books to Stewart’s! I offered to use one of the open texts approved by American Institute of Mathematics (Beezer’s or Hefferon’s) because I love free and open things. It was then we he got serious (mad?) and told me that I am “not allowed” to use any other books unless I show that the part related to it in lyryx’s text is not well written, or is missing, and even it that case I “should” add to the text or edit it, since it is open.

Now, I understand that how open things work, I contribute to open software community, and I use them all the time. For the past 10-12 years I exclusively have used linux operating systems and “tried” to avoid “non-free” software, and slowly I’ve become more and successful in not using them. I write part of code that I use in my everyday computer usage, and I try to contribute as much to other open software (whether by bug report, testing, coding, or by buying coffee for the developers) as I can. But I don’t think that forcing people to use something, and to fix/develop it if it doesn’t do what they need, is a great way of spreading open culture. Personal ideas aside, I believe I have an academic freedom to choose the textbook, and modify the syllabus of a course that I am assigned to teach, and I feel like this has been violated.

It wasn’t until several months later that through a random search on something else, I realised Claude Laflamme is the president of the company lyryx! I highly appreciate a community work to provide better learning experiences for students, and I think we should see a lot more of these movements happening all around, but the thing that I am not very much sure about is if this act by the president of the company, who ironically is in charge of a few courses in the department is legal or not. In either case, I believe such behaviours should be reviewed and regulated.

The part that bothers me personally is that a lot of formal processes at the math department of the Univeristy of Calgary are done behind closed doors, and decisions are made in a case-by-case basis with only a few, and sometimes only one or two, people involved. See my post about decisions about which sessional instructor gets paid how much for each course in the math department, how there is no record of these decisions being made, and no clarifications when I asked about it. Similarly, I never could figure out that Claude Laflamme telling me I am not allowed to change the syllabus and textbook was his personal “recommendation” to me, or it was an “order” from a department official. Again, in either case, I believe either him or the department should be held responsible for it.

To finish the story, towards the end of the semester Claude Laflamme called me in, and told me that “some” of my students aren’t happy that I’m teaching vector spaces, bases, linear independence etc. After I asked about how many, he told me he had received complaints from two students, so he felt that he needs to warn me that I cannot “push” these topics in my assessments, which I obliged! So much for a course design, eh!

So, here is my question: Am I just overreacting to the whole thing? I know about all the political correctness, being a good citizen of the department, and all that jazz. I’m asking about mine vs. department’s rights/responsibilities. Because I feel abused in so many ways and I dunno where I stand legally.

Octave/MATLAB resources

Andrew Ng in his Corsera course for machine learning provides the following links for resources for Matlab. I have had a terrible time remembering all the syntaxes in matlab (because they are so natural, no?) I’m putting them here so that I can access them later. The credit goes to Andrew Ng.

Octave Resources

At the Octave command line, typing help followed by a function name displays documentation for a built-in function. For example, help plot will bring up help information for plotting. Further documentation can be found at the Octave documentation pages.

MATLAB Resources

At the MATLAB command line, typing help followed by a function name displays documentation for a built-in function. For example, help plot will bring up help information for plotting. Further documentation can be found at the MATLAB documentation pages.

MathWorks also has a series of videos about various MATLAB features:

Introduction to MATLAB

Learning Module Learning Goals
What is MATLAB? Introduce MATLAB
The MATLAB Environment Navigate the command line, workspace, directory, and editor
MATLAB Variables Use the assignment operator to define scalar variables
MATLAB as a Calculator Perform arithmetic calculations with scalars and functions using MATLAB syntax and order of operations.
Mathematical Functions Use MATLAB variables for input and output to functions. Examples include: COS, SIN, EXP, and NTHROOT.


Learning Module Learning Goals
Creating Vectors via Concatenation Create vectors by entering individual elements
Accessing Elements of a Vector Access specific elements of a vector
Vector Arithmetic Perform arithmetic calculations with vectors including element-wise operations
Vector Transpose Use the transpose operator to convert between row and column vectors
Creating Uniformly Spaced Vectors (The Colon Operator) Use the colon operator syntax to create vectors given the starting and ending values and the size of the interval
Creating Uniformly Spaced Vectors (The LINSPACE Function) Use the LINSPACE function to create a vector.


Learning Module Learning Goals
Line Plots Create a line plot of a vector and customize plot markers and colors
Annotating Graphs Label axes, add a title, and add a legend to a plot

Matrices and Arrays

Learning Module Learning Goals
Creating Matrices Create matrices by directly entering scalars
Array Creation Functions Create larger matrices and vectors with built in MATLAB functions such as ZEROS and EYE
Accessing Elements of an Array Access elements of an array including entire columns or rows using row-column indexing.
Array Size and Length Use built-in functions to determine array dimensions
Concatenating Arrays Build larger arrays from smaller ones
Matrix Multiplication Perform matrix multiplication and interpret error messages related to incompatible dimensions.


Learning Module Learning Goals
Using the MATLAB Editor Write a script in the MATLAB Editor, break code into sections to execute, and find help on functions
Logical Operators Use relational and logical operators to create logical variables for program control
Conditional Data Selection Access and change elements for a vector the meet a specified criteria
If-Else Statements Use if-else statements to control which lines of code are evaluated
For Loops Repeat a sequence of commands a specified number of times
While Loops Repeat a sequence of commands while a specified condition is true