Press right on your keyboard or swipe right to navigate
Over the last year, the International Center for Humanitarian Affairs (ICHA), supported by British Red Cross and other Movement partners, have been carrying out research into the 2016-17 drought crisis in East Africa, and how the Red Cross and Red Crescent Movement responded.
By speaking to dozens of people, and reviewing hundreds of documents, the research (which can be read in full here) has led to a series of insights about how National Societies and Movement partners can better prepare for, and respond to, future drought events.
Each of the 11 insights is shown on the following pages, along with the evidence from the research that led to these insights, and links to resources that give further information and guidance.
Each page will describe an insight from the research. If you want to find out more about the evdience behind the insight press down on your keyboard or swipe down. There you will also find more information and links to resources providing further reading, learning materials and related content.
When you press or swipe down, more information will appear in pages like this.
Click below to jump to a section
Kenya Red Cross' DM strengthening project improved the technical skills of staff and volunteers; causing faster response time, wider reach, decentralization of interventions, better data collection and reporting.
Press down for more
The preparedness of ICRC and Somali Red Crescent in terms of funding, volunteer networks and emergency stocks, allowed them to make a faster and more impactful response than most other responders.
Press down for more
In Ethiopia, training of NS staff and volunteers on community based health and first aid CBHFA improved the quality of response. In some affected areas, the NS were the only operating humanitarian responder.
Press down for more
In Kenya, increasing staff and volunteers' technical capacities and creation of RCATs in different branches, increased the reach and efficiency of interventions.
Press down for more
Training community volunteers on WASH proved to be very effective, especially in Somalia.
Press down for more
Procurement of essential equipment and items was challenging for some NS, , due to lack of proper procurement mechanisms, proper logistical information and established linkages with suppliers.
Press down for more
PER:
Safer Access:
http://saferaccess.icrc.org/A cross-sector cash coordination group was established as part of the preparation and planning phase.
Effective multi-sectorial and multi-agencies coordination resulted in better quality and timeliness of preparedness measures, especially in Kenya and Ethiopia.
Press down for more
A consortium approach was best implemented in Ethiopia, as external partners were able to coordinate. Somalia pooled their resources and shared information, which led to minimal duplication in the same areas of intervention. In Somalia the cluster coordination worked well at 'meetings level' (if not operational level due to low capacity local organisations).
NS should join consortiums to have more collaboration with external partners and to improve coordination and strengthen complementarity within the humanitarian world.
Press down for more
Leveraging on their auxiliary role to the government, NS should lobby and engage the government to central to drought management (Sic), resilience agendas and provide centrifugal force to other sector actors. This will ensure actors work collaboratively for effective service delivery and encourage political goodwill; critical in timely intervention and resilience building.
Press down for more
In some responses, ineffective coordination led to duplication of efforts with other agencies.
Multi-stakeholders' coordination and multi-sectoral approach was successful in strengthening the response measures in Ethiopia and Somalia.In Kenya, increasing staff and volunteers' technical capacities and creation of RCATs in different branches, increased the reach and efficiency of interventions.
Press down for more
Collaboration was essential for humanitarian organizations to have an impact at grassroots level. Lack of information sharing made coordination challenging in Kenya, which led to duplication especially in CTP.
Press down for more
Consortiums and cluster groups are important for coordination, cooperation and encourage joint fundraising. The RCRC movement should deliberately and actively be involved in consortiums and clusters throughout operations.
Press down for more
OCHA Coordination:
Weather and climate forecasts have become more reliable and available at global, regional and national level. This supported strong action and preparedness following severe drought warnings in late 2016.
Press down for more
Ethiopian Red Cross worked closely with the meteorological department to undertake situational analysis and strengthen its preparedness activity.
Press down for more
Kenya Red Cross was able to utilise information from a variety of sources, including the Kenya Meteorological Departments and FEWSNET. This allowed them to begin responding and mobilizing resources in October 2016, four months before the government declared the drought a national disaster.
Press down for more
FEWSNET:
VAM: https://vam.wfp.org/
Food Security Information Network: http://fsinplatform.org/
Kenya Red Cross had worked with IFRC to put together a plan of action in 2015; this plan provided a basis for the 2016/17 response, and allowed for quick planning and resource mobilization.
Press down for more
Kenya Red Cross branches in Arid and Semi-Arid Lands (ASALs), developed county contingency plans with county governments, in preparation for the forecasted drought, which allowed them to respond faster and more effectively.
Press down for more
In early 2016, KRCS prepared for drought through capacity building of the RCAT and National Disaster Response Team (NDRT). Training included conducting rapid assessments using the Kenya Inter-Agency Rapid Assessment (KIRA) tool, monitoring of drought situations and putting in place contingency plans. The KRCS developed the response tools; Document Management Framework (the hierarchy of documents); SoPs for drought and RCAT guidelines. These were critical during response, making response organized and well-coordinated.
Press down for more
IFRC contingency planning guide:
https://www.ifrc.org/PageFiles/40825/1220900-CPG%202012-EN-LR.pdf
Branch and community level Disaster Response Teams - reduced the time it took for information to be shared with headquarters, deployment and response times
Press down for more
KRCS branches in areas at risk of drought developed county contingency plans with county governments, in preparation for the forecasted drought. Maternal, Newborn and Child Health (MNCH) and Monitoring and Evaluation groups were established to monitor the situation on the ground.
Press down for more
DM strengthening project improved the technical skills of staff and volunteers leading to faster response time, wider reach, decentralization of interventions, better data collection and reporting.
Press down for more
In Ethiopia, the volunteer network allowed the NS to be the only actor present in some affected areas.
Press down for more
In Somalia, Community Based Organisations and their Community Actions Plans were context specific and relevant; informing context-specific coordination, assessments and actions.
Press down for more
Community Engagement Hub:
https://www.communityengagementhub.org/
The case for complementarity:
https://www.icrc.org/en/download/file/88335/the-case-for-complementarity-report.pdf
A lack of funds to undertake their own immediate assessment and response was a barrier for all NS.
Pre-positioned stocks were very useful in Somalia, where ICRC used them as part of the first line response.
Press down for more
More early action would have been possible if partners had budgeted more flexibly within their multi-year funding and made a stronger case to back donors for doing so.
In Somalia, constant presence of ICRC and major donors such as ECHO, along with good cluster coordination, meant they were able to respond to the drought efficiently because of emergency reserve funds.
Press down for more
More widespread use of various flexible funding mechanisms within long-term development and resilience budgets and programs, would have supported the drought response.
National Societies need to invest more in Forecast-based Action and Forecast-based Financing in addressing drought in this region, since weather and climate forecasts have become more reliable, skillful and widely available at global, regional and national level.
Press down for more
NS need to adopt some of the early warning systems developed by other actors as tools and information for preparedness and response to drought. For example, the Predictive Livestock Early Warning System provides a closer picture of the impact of drought on key grazing areas and reflects the trends in forage recovery.
Disaster preparedness has increased regionally to enhance effective disaster response and management. For example, at the global level through the EWEA Ethiopia, Kenya and Somalia, critical situations are flagged quarterly, and this information is used to provide recommendations on early action in agriculture and food security.
Press down for more
IFRC preparedness library:
Although there was no documented evidence on the role the livelihoods and resilience projects implemented by RCRC Movement after the 2010/2011 in drought preparedness, close observation of areas badly hit by the 2015/2017 drought indicated that these projects had a positive effect. In Kenya, places where preparedness activities involved building and repairing infrastructures such as boreholes and clinics, showed higher absorption rates in terms of dealing with the shocks, than areas that did not have resilience projects.
Press down for more
In Somalia, where clinics that had been upgraded and equipped after the 2010/2011 drought were able to handle more AWD outbreak patients and treatment was done in a timely manner which saved more lives than previous times.
Press down for more
Evidence shows that long term programming has more positive impact on communities and national societies. Explore how short-term responses can be designed to merge into bigger development goals, once the emergency phase has ended. Donors should also be encouraged to fund long term programs in disaster prone areas so as mitigate the risks.
Press down for more
Link:
Due to contingency plans and DM strengthening, the Kenya Red Cross started emergency response months before the national government declared the drought a national disaster.
Press down for more
Due to contingency plans and DM strengthening, the Kenya Red Cross started emergency response months before the national government declared the drought a national disaster.
Press down for more
British Red Cross report "the case for complementarity" report:
https://www.icrc.org/en/download/file/88335/the-case-for-complementarity-report.pdf
Somalia NGO Consortium, Principles into Practice: Aid Localisation in Somalia
SRCS' auxiliary role to government and accepted among communities, has helped implementing responses (in some areas the SRCS was the only organization operating).
Press down for more
Due to the volunteer network, Ethiopia Red Cross was able to be the only humanitarian actor in some areas
Press down for more
Kenya RC has used its auxiliary role to coordinate with government at national, regional, and community level, including in preparedness activities
Press down for more
Link:
Capacity assessment on cash preparedness, helped improve CTP because systems were put in place to ensure the effectiveness and efficiency of the modality
Red Cross Action Team (RCAT) responsible for responding to disasters in three counties prone to drought (Tana River, Isiolo and Turkana), were trained in Cash Transfer Programming (CTP) and livestock management. This proved useful during the response phase.
Press down for more
It is evident from the findings that response to drought using cash worked well in most parts, thus this can be enhanced by using cash as a preparedness modality before drought strikes. Leveraging on the existing social protection programmes such as the Hunger Safety Net in Kenya which operates in drought prone areas and has experience in scaling up additional recipients in drought emergencies, National Societies can help scale up cash transfers to reduce or manage human and economic losses as a result of drought through the delivering of cash before disaster as a social protection measure while using these programmes as scalable platforms that can support people affected by drought more effectively
Press down for more
The NS can also adopt technologies that will enhance their response such as the use of Blockchain technology in Cash Transfers. In 2018, KRCS piloted blockchain technology during drought response in Isiolo County
RedRose data management platform was used in managing all aspects of the project cycle in just ten days, consent, disbursement and post-distribution monitoring was done proving that CTP delivery can be timely and up scaled
Press down for more
CTP helped families assist themselves; majority used money to buy food and medication.
Innovation and technology improved the quality of preparedness and the impact of interventions at community level
Press down for more
CTP proved to work well especially in Kenya and Somalia
CTP was revolutionary as a response modality to drought, especially where markets were functioning, and mobile technology was accessible.
Press down for more
Cash Hub:
Cash In Emergencies Toolkit:
Effective collaboration between IFRC and Kenya Red Cross during 2015 allowed for a successful expansion of activities following when the drought conditions worsened in 2016/17
Press down for more
The lack of a strong IFRC presence in Ethiopia hampered coordination with the NS, and diminished the effectiveness of the IFRC emergency appeal
Press down for more
In all countries, PNS partners helped resource mobilization, trainings, planning and response. When the IFRC lacks capacity to undertake necessary preparedness or response measures, pre-decided and coordinated consortium PNSs should fill the gaps
Press down for more
Members of the Africa Drought Management Advisory Group (ADMAG) have unanimously agreed that more efforts need to be put towards strengthening movement coordination and cooperation and building NS capacities
Press down for more
Despite the fact that we are a movement, we lack the means to come together achieve purposeful scale and impact. Other agencies can quickly form coalitions and consortium and go for funding opportunities. For example, in Somalia there is an NGO cash consortium of approximately 7-8 agencies led by Concern Worldwide funded by ECHO. They quickly formed, reached agreement, identified their added value, and implemented.
Press down for more
Procurement of essential equipment and items was challenging for some NS, , due to lack of proper procurement mechanisms, proper logistical information and established linkages with suppliers.
Press down for more
SMCC Toolkit:
Tom Nelson - Impact & Learning Officer at the British Red Cross<EMAIL_ADDRESS>This site is hosted using Github Pages and is gratefully forked from the work of Simon B Johnson
Photo credits and permissions: image one, etc. TBC


Enabled guild features.
var Features: string[]
Enabled guild features are listed in this property as strings. This references primarily experimental features that are still being tested.


Tetrominoesby Thomas Harte Cursor left/right or J/L: move piece Cursor down or K: fast drop Cursor up, I, A or Z: rotate anti-clockwise S or X: rotate clockwise 0–9: set start level (currently 0) Q: increase start height (currently 0) A: decrease start height |
Tetrominoesby Thomas Harte Cursor left/right or J/L: move piece Cursor down or K: fast drop Cursor up, I, A or Z: rotate anti-clockwise S or X: rotate clockwise 0–9: set start level (currently 0) Q: increase start height (currently 0) A: decrease start height |
PausedPress space to unpause |
|
Lines: 0
Level: 0 Score: 0 |


You might like these movies:
{% for i in range(movie_info.shape[0])%}
{% endfor %}
Movie Title: {{movie_info.title[i]}}
Overview: {{movie_info.overview[i]}}
Release date: {{movie_info.release_date[i]}}
Popularity: {{movie_info.popularity[i]}}


problems trying to resolve the conflict between
the two major
realms of classical physics.Newtonian mechanics
Things on a very small scale behave like nothing.

Things on a very small scale behave like nothing.
the gradual accumulation about atomic and small-scale beheviour during the first quater of the 20th
made with love by mary All right reserved


| scrollDown |
false |
boolean |
Dock when the element goes out by top |
| scrollUp |
false |
boolean |
Dock when the element goes out by bottom |
| dockToTopFrom |
false |
number |
Dock to top when this value (in px) is reached by scroll |
| dockToBottomFrom |
false |
number |
Dock to bottom when this value (in px) is reached by scroll |
| stopDockFrom |
false |
number |
Stop docking when the scroll is equal to this value (in px) or more |
| stopDockBefore |
false |
number |
Stop docking when the scroll is equal to this value (in px) or less |
| marginT |
10 |
number |
Margin to add on top before docking (on scrollDown) |
| marginB |
10 |
number |
Margin to add on bottom before docking (on scrollUp) |
| dockedClass |
'docked' |
string |
Class name added to the element when is docked |
| zIndex |
'auto' |
number |
Z-index added to the element when is docked |
| onInit |
false |
function |
Function invoked when the Plugin is turned on |
| onStop |
false |
function |
Function invoked when the Plugin is turned off |
| onDock |
false |
function |
Function invoked when the element is docked |
| onUndock |
false |
function |
Function invoked when the element is undocked |


DIKSHA JOSHI
FRONT-END DEVELOPER
FEATURED WORK
NOTE-TAKING-APP
SOURCE
HACKER-NEWS-CLONE
SOURCE
WIKIVOICE
SOURCE


I did little to prepare for the experience that was to come. Everything went as it normally did that day. I did however take a minute to sit down before hand and gather my thoughts and try to relax. I was kinda of nervous not knowing what to expect but anyway on to my experience.
I dropped 4 to 6 pieces of dried toad venom ranging in size from that of a match head about half that into a test tube. I then turned the test tube horizontly making sure to get all the pieces in roughly the same are at the end of the pipe. I then applied a jet flame lighter that has a blue flame to the underside of the testube under where the venom lay. I waited until it began to burn and crackle and then smoke began to fill the tube. While keeping the flame going I inhaled all of the smoke in the testube (probably too much) in one complete inhalation. Almost immediately I began to feel the effects.
I layed back on my bed and although I had no significant visuals my vision was different than normal. It was tunnel like with things slightly blurry and static like if that makes any sense at all. Physically it felt as though I was begin catapulted at a thousand miles an hour and could do nothing to stop myself. My teeth were on the verge of chattering when I heard one of my parents I started to freak out so I moved downstairs farthest away from them and sat or laid on the couch endured the rest of the experience until it began to subside at which point I began to walk around and felt my legs to be kinda of shaky and weak. I did however have a pleasant after glow to the whole experience.
I felt kinda of lucky I had experienced 5-MeO but was not in any hurry to try it again anytime soon. I would not say I really enjoyed my experience nor did I regret it. I would say however that it is something to be approached with caution. As one person's experience could be very different from the next person's.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Departure city
Arrival city
Date
Car must be add via and validated by us to appear here
Seats which will not be used
Seats already book


Genomics Elements
About
Requirements
1) Include this two files from Polymer project via CDNjs, you can also download them and host them on your server.
2) Include individual files for the files you need, for example if we are going to use x-gene custom element we will include x-gene.html file
Elements
<x-gene>
usage
<x-gene name="BRCA1"></x-gene>
example (hover BRCA1 gene name in text below to see tooltip)
and
are a human gene and its protein product, respectively. The official symbol and the official name are maintained
by the HGNC.
Orthologs, styled Brca1 and Brca1, are common in other mammal species. Wikipedia
<go-term>
usage
<go-term term="GO:0070531"></go-term>
example
: A protein complex that contains the BRCA1-BARD1 heterodimer, RAP80/UIMC1, BRCC3/BRCC36, BRE/BRCC45,
FAM175A/CCDC98/Abraxas and MERIT40/NBA1, and specifically recognizes and binds K63-linked polyubiquitin chains present on histone
H2A and H2AX at DNA damage sites. Source


Crest Grolsch advanced alcohol free mouth wash is the result of the joint business venture of Crest and Grolsch. Crest's alcohol free mouth wash was in need of a new take as consumers were losing interest. Apparently the issue with the alcohol free mouth wash was the alcohol free part. Consumers clearly want a buzz while they brush. As this would lose most dentists recommendation they partnered with Grolsch to make a beer flavoured alcohol free mouth wash. Now combining the excellent dental benefits of Crest products with the great taste of Grolsch beer.
Social Media


csvgrep -c 1 -m string_to_match data.csv- Find rows in which columns 3 or 4 match a certain regular expression:
csvgrep -c 3,4 -r regular_expression data.csv- Find rows in which the "name" column does NOT include the string "John Doe":
csvgrep -i -c name -m "John Doe" data.csv


|
|||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
Represents a listen operation that has been started on a ListenEndpoint
.
A ListenHandle
is returned from a successful
ListenEndpoint.listen
invocation to represent the
listen operation started by that invocation. This object can
be used to stop the listen operation and to obtain a
ListenCookie
to identify the listen operation as
the return value of the ListenContext.addListenEndpoint
method.
| Method Summary | |
void |
close()
Stops listening for requests on the associated ListenEndpoint .
|
ServerEndpoint.ListenCookie |
getCookie()
Returns a ListenCookie to identify the listen
operation as the return value of the ListenContext.addListenEndpoint method. |
| Method Detail |
public void close()
ListenEndpoint
.
After this method has returned, no more requests will be
dispatched to the RequestDispatcher
for the
listen operation represented by this
ListenHandle
, and the listen operation is no
longer considered active. This method frees any resources
associated with the listen operation.
Invoking this method terminates any requests that have
been received because of the listen operation and
dispatched to the associated RequestDispatcher
but have not yet had their response output stream closed
(see InboundRequest.abort
);
subsequent I/O operations on such requests will fail with
an IOException
, except some operations that
may succeed because they only affect data in local I/O
buffers.
public ServerEndpoint.ListenCookie getCookie()
ListenCookie
to identify the listen
operation as the return value of the ListenContext.addListenEndpoint
method.
ListenCookie
to identify the listen
operation
|
|||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


Netizens bring up the final member line-up error on season 2 of 'Produce 101' in light of the vote-manipulation controversy
by sl278Netizens are bringing back to light an error made for Wanna One's final line up on 'Produce 101's official Facebook page.
Netizens recalled that back in season 2 of 'Produce 101,' three members were listed in the final 11 member line up that were included by accident and uploaded on 'Produce 101's official Facebook page. These members include Samuel Kim, Kang Dong Ho, and Kim Jong Hyun. However, the final line up of Wanna One exchanged these three members for Yoon Ji Sung, Ha Sung Woon, and Kim Jae Hwan.
At the time, Mnet apologized for the mistake, stating, "Hello, this is the administrator for 'Produce 101'. We apologize for the mistake of uploading the image posted at 3:20 PM KST on June 17. The image in question was a sample image, and we have fixed the mistake right away. We will make sure to pay closer attention to maintaining this page. We apologize once again." Fans of the show were outraged because the three trainees who were eliminated but had their photos in the incorrect image were trainees whom many believed to have secured, or almost secured, spots in the top 11 debut group.
Given the current vote manipulation controversy, netizens believe that the original three members included in the so-called 'mistake' are the rightful winners of the places in the final group.
What do you think?


{{Help Desk Information}}
{{ Q: What is the Help Desk tab for? }}
{{
This tab is intended to help provide a brief, concise explanation
of your connectivity. This can be read over the phone, if needed,
to a service provider. This tab has less hand-holding; it is
intended for a help desk to understand (as compared to an end user).
}}
{{This special instance shares in a very compact way:}}
- {{Status of each protocol}}
- {{Warn of slow/timeout}}
- {{Warn of MTU}}
- {{Status of reachability to “other sites” (as compact as possible)}}
- {{IP address shown, in case tech support needs it.}}
- {{List of unreachable sites, if any}}
{{ Q: What is the easiest way to send users to the Help Desk tab? }}
{{
There are several ways to do it. Some of these are more obvious than the
others when reading; some of them may be easier when read over the phone.
In all of these cases, the "Help Desk" tab is moved to be the first and
default tab shown to the user, instead of exposing the more detailed
user-facing page.
}}
- test-ipv6.com/helpdesk (preferred for printed documentation)
- test-ipv6.com/isp
- helpdesk.test-ipv6.com
- isp.test-ipv6.com
- testv6.com/helpdesk (spoken English, "test vee six dot com slash helpdesk")
- testv6.com/isp
- helpdesk.testv6.com
- isp.testv6.com


I occasionally explore the effects of various mind-altering substances available to me. Perhaps if various space agencies started exploring heavenly bodies again and not just sending folks to circle the earth, my curiosity would be satiated.
Anyway, twice in the past, I have taken ~75mg of ketamine orally, usually mixed with grape juice. Taken in this manner, the descent into the K-Zone is fairly slow and easy.
In all cases, I don't take this chemical if I will be required to interact socially. Generally it is not a drug that will facilitate socializing. I recommend doing this in a home where you will not be disturbed, having a movie playing in the background will help. Austin Powers:The Spy Who Shagged Me, worked well for me, as you will see shortly. Personally I adjust the lighting in the room to a low level, enough to see objects easily, but not glaringly bright. I avoid Loud intense music altogether.
As a dosing guideline, I referenced that required for human anesthesia: the recommended dosage is 1-2mg/Kg I.V. I am ~73Kg, so if I was prepping myself for surgery, I'd require between 73mg and 146mg given I.V. However, reaching a surgical plane of anesthesia was not my intent. I drew up 40mg of Ketaset using a sterile 3cc syringe and a sterile 25-gauge needle. I double-checked the lighting conditions and the noise in my immediate environment, and then hit PLAY on my DVD player. Everything was set.
3:30pm-After wiping my right shoulder with alcohol, I slowly and ~painlessly inserted the needle into my deltoid muscle.  Good. I slowly pushed the plunger home, and enjoyed the mild burning sensation in the muscle. The syringe was withdrawn and the needle recapped. I layed down and began to watch the movie.
3:37pm-The first effects were noticed, a sense that the environment around me was different somehow. This form of administration comes on quickly and I felt my body being pulled down into the K-Zone. The feeling would best be described as having tunnel vision--with the periphery not black, but blurry. The central field of vision, about the size of a CD held at arm's length, was clear, outside of that, objects shimmied and seemed to vibrate, maybe even pulsate. My arms and legs felt oddly distant, detached from the brain, yet I had full control over their movement.
3:40pm-Standing, or major movement of any sort, was very upsetting to my equilibrium. It wasn't exactly nausea, but something very close to it. If an object was not in arm's reach, it took considerable effort to coordinate the movements necessary to get the desired object. I had to motivate myself to accomplish this simple task by reassuring that in less than two seconds, I will be right back in the same comfortable position. I closed my eyes, rolled to my right, grabbed the remote control, and rolled back again. It sounds simple enough now, but during the eternity it took to accomplish that magnificent feat, it felt like I was on an amusement park ride, the kind that spins and spins and spins. Disorientating, but without any nausea.
3:50pm-Trying to talk at this point was futile, the mind, the thinking part of the brain works, its the muscular coordination involved that is problematic. Even when a sentence is started, keeping my mind on what I intended to say is difficult. There are a lot of 'Uhs' in between syllables and a lot of repetition. One's body--especially the arms & legs--feel numb and cold. Tactile sensation is almost completely gone. I tended to drop objects, not realising that I was not gripping them strongly enough. This lack of sensation/feedback is why this drug is used as an anesthetic.
3:50pm-I find that Paranoia and anxiety accompany the use of this drug. It is almost always given with other meds when used clinically. Tranquilizers like diazepam, or midazolam would help minimize the negative feelings. I began to worry that I was not breathing enough (ketamine is well known NOT to depress breathing). Even with this knowledge, I still began breathing more often and with deeper inspirations. I also began to worry that I might have cut myself and not realised it. At this point, my mind felt as though it was surrounded, packed in the cold, insensitive meat that was my body. Such feelings surely lead to the Near-Death-Experiences that many ketamine users relate.
3:55pm-It was about this time, in the midst of unpleasant thoughts and feelings, that I began to laugh whole-heartedly. The Mustafa character in the Austin Powers' movie had fallen off the cliff, and was asking for help--he was pretty sure that he had broken his leg, but he would try to stand on it.... Yes, I was quite glad to have had the forethought of playing this movie shortly before dosing.
The rest of the experience was generally pleasant. I spent that time watching the rest of the movie. As the drug was metabolised, I gradually returned to a normal state. It was roughly an hour later, 4:30pm, before I felt capable of walking again. By 6:00pm, I felt completely normal again.
In retrospect: This is not a party drug. You should consider having a sober sitter with you for reassurance purposes and to keep you from getting hurt.
Ketamine works by reversibly binding & blocking the sensory input channeled through the thalamus and projected to the prefrontal cortex. Most body sensations like temperature, pain and pressure don't reach the prefrontal cortex and so one does not become aware of them. In the absence of sensory input, my body feels cold & numb, yet you I still move--so it is not like being totally paralyzed--only halfway so. Our brain is accustomed to receiving this sensory input, and without it, thoughts are amplified. The brain may also invent, or exagerate other stimuli that does make it through to ones conscience. This is why I would recommend a low light environment with minimal noise.
This is a drug that I have used about once every four years. I forget that it is a very heady drug and self-evaluation/criticism is a major component of the trip. If you're not in a good place in your life, wait until you are before trying it. Lastly, take my advice and put a stupid/funny movie in and play it before you start the trip. If your mind starts going to a negative place, you can easily divert your attention and bring yourself to a happy place mentally.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


CL = SVMKERNELLEARN(K, Y) uses LIBSVM to train an SVM with custom kernel K and labels Y. The result CL is a structure with fields:
CL.LIBBSVM_CL : SVM (libsvm format) CL.RBF : Using RBF transformation? (0/1) CL.GAMMA : RBF parameter CL.LABELS : Category labels
Options:
Type ['C']
Set the SVM type to 'C' or 'nu'.
C [1]
Set the SVM C parameter. The C parameter establishes the trade-off between maximizing the margin of the decision function from the correctly classified data and the number of misclassified data. A large C gives more importance to reducing the number of mistakes, but may increase overfitting.
Nu [.5]
Set the nu-SVM nu parameter.
RBF [0]
Enable RBF transformation. Assuming that the input argument K is actually a metric, the kernel is defined as K' = EXP(- gamma K).
Gamma [[]]
GAMMA constant of the RBF transformation.
Balance [0]
Enable data balancing. Balancing reweights the data so that the empirical error term (see C option) in the SVM cost functional is computed assuming that the labels are equally probable. Balancing affects the value of the C parameter for each sample, increasing its value for the less represented labels.
CrossValidation [0]
Perform N-fold cross validation to determine the optimal value of the paramter C. In this case specifying C has no effect.
Verbosity [0]
Set verbosity level.
Debug [0]
Print debugging informations.
Probability [0]
Return probability of classification instead of the decision value.
LIMITATIONS. Currently, only C-SVM is supported.
See also SVMKERNELTEST().


Disney+ vs. the competition: Which offers the best bang for your buck?
Probably still Netflix, tbh.
by Kris NaudusWith so many different streaming services coming out of the woodwork it's getting harder to keep up with everything — as well as more expensive. That's not going to get any better now that Disney's launched its own offering, with shows from popular franchises like Star Wars and Marvel to entice you to sign up. With only so much time and money to go around, you might need to make a choice as to which offers the best bang for the buck. While we can't tell you which shows you'll like, we can certainly help you out with some of the more technical details, so check out the chart below to see how Disney+ will stack up against established players like Netflix.
| Disney+ | Netflix | Amazon | Hulu | |
|---|---|---|---|---|
| Price | $7 /month or $70 /year |
starts at $9 /month | starts at $13 /month or $119 /year |
starts at $6 /month |
| Number of original programs1 | 10 (at launch) | 1,056 | 138 | 71 |
| Premium content | None | None | HBO, Showtime, Cinemax, Starz, Shudder, Comedy Central Now, PBS Kids, CBS All Access, etc. | Disney+, ESPN, HBO, Showtime, Cinemax, Starz |
| Live entertainment content | None | None | None | Yes |
| Live sports | None | None | NBA, NFL | NFL |
| Advertising | Yes2 | None | None | Yes |
| Downloadable content | Yes | Yes | Yes | Yes |
| Max video quality | 4K with HDR and Dolby Vision | 4K with HDR and Dolby Vision | 4K with HDR and Dolby Vision | 4K |
| Media players | Android TV, Apple TV, Chromecast, Fire TV, Roku | Android TV, Apple TV, Chromecast, Fire TV, Roku, Tivo3 | Android TV, Apple TV, Chromecast, Fire TV, Roku, TiVo | Android TV3, Apple TV, Chromecast, Fire TV, Roku, Tivo3 |
| Smart TV3 | LG, Samsung | Hisense, LG, Panasonic, Philips, Samsung, Sanyo, Sharp, Sony, Vizio | Hisense, LG, Panasonic, Philips, Samsung, Sony, Vizio | Hisense, LG, Samsung, Sony, Vizio |
| Game consoles | PlayStation 4, Xbox One | PlayStation 4, Xbox One, PlayStation 3, Xbox 360, Wii U, PS Vita, 3DS | PlayStation 4, Xbox One, PlayStation 3, Xbox 360, Wii U | PlayStation 4, Xbox One, Nintendo Switch, PlayStation 3, Xbox 360 |
| Simultaneous streams (max) | 4 | 4 | 3 | Unlimited |
1Estimate of original programming as of 12/31/2019, as listed on Wikipedia and Netflix.
2 Only during the initial signup process as part of a deal with Starz.
3 Select models only; check compatibility of individual sets.


WikiBardia
A Shakespeare Translator for Wikipedia.
'Cause, you know, everybody needs one.
Wikipedia Article
Enter Wikipedia search term:
Search
Translation from the Bard


This inspection reports any non-final field in a class with annotation @net.jcip.annotations.Immutable. This violates the contract of the @Immutable annotation.
New in 9


12/29/1968
Search
Apollo 8 Crew Arrives in Houston: Although it was past 2 a.m., a crew of more than 2,000 people were on hand at Ellington Air Force Base to welcome the members of the Apollo 8 crew back home. Astronauts Frank Borman, James A. Lovell Jr., and William A. Anders had just flown to Houston from the pacific recovery area by way of Hawaii. The three crewmen of the historic Apollo 8 lunar orbit mission are standing at the microphones in center of picture. (NASA on The Commons)


We're a large community focused around the Python programming language. We believe anyone can learn to code, and are very dedicated to helping novice developers take their first steps into the world of programming. We also attract a lot of expert developers who are seeking friendships, collaborators, and who wish to hone their craft by teaching and getting involved in the community.
We organise regular community events such as code jams, open-source hackathons, seasonal events, and community challenges. Through our sponsorships and donations, many of our events even have prizes to win!
You can find help with most Python-related problems in one of our help channels. Our staff of over 50 dedicated expert Helpers are available around the clock in every timezone. Whether you're looking to learn the language or working on a complex project, we've got someone who can help you if you get stuck.


The TDM creates indexes for GRIB featureCollections, in a process seperate from the TDS. This allows lengthy file scanning and reindexing to happen in the background. The TDS uses the existing indices until notified that new ones are ready.
The TDM shares the TDS configuration, including threddsConfig.xml and the server configuration catalogs. On startup, it reads through the catalogs and finds GRIB featureCollections with a <tdm> element and adds them to a list. It can index once or periodically, depending on how you configure the <tdm> element. If you change the configuration, you must restart the TDM.
- For static datasets, let the TDM create the indexes, then start the TDS.
- For dynamic datasets, the TDM should run continually, and can send messages to the TDS when a dataset changes.
Get the current jar here.
The TDM can be run from anywhere, but by convention we create a directory {tomcat}/content/tdm, and run the TDM from there.
Create a shell script to run the TDM, for example runTdm.sh:
<JAVA> <JVM options> -Dtds.content.root.path=<content directory> -jar <TDM jar> [-tds <tdsServers>] [-cred <user:passwd>] [-showOnly] [-log level]for example:
/opt/jdk/bin/java -Xmx4g -Dtds.content.root.path=/opt/tds/content -jar tdm-4.5.jar -tds "http://thredds.unidata.ucar.edu/,http://thredds2.unidata.ucar.edu:8081/"where:
- <JAVA> Large collections need a lot of memory, so use a 64-bit JVM
- <JVM options>
- -Xmx4g to give it 4 Gbytes of memory (for example). More is better.
- -Dtds.content.root.path=<content directory> this passes the content directory as a system property. The thredds configuration catalogs and threddsConfig.xml are found in <content directory>/thredds. Use an absolute path.
- -jar tdm-4.5.jar : execute the TDM from the jar file
- -tds <tdsServers>: (optional) list of TDS servers to notify. If more than one, seperate with commas, with no blanks. Specify only the scheme, host and optional port with a trailing slash for example: http://localhost:8081/
- -cred <user:passwd>: (optional) if you send notifications, the TDS will authenticate using this user name and password. If you do not include this option, you will be prompted for the password on startup, and the user name will be "tdm".
- -showOnly: (optional) if this is present, just show the featureCollections that will be indexed and exit.
- -log level: (optional) set the log4j logging level = DEBUG, INFO (default), WARN, ERROR
Troubleshooting:
- Make sure that the <JVM Options>, including -Dtds.content.root.path, come before the -jar <TDM jar>
- The <content directory> does not include the thredds subdirectory, eg /opt/tds/content not /opt/tds/content/thredds.
- You must run the TDM as a user who has read and write permission into the data directories, so it can write the index files (OR)
- If you are using GRIB index redirection, the TDM must have read access to the data directories, and write access to the index directories.
^Z (this is Control-Z) bg
The TDM scans the files in the feature Collection, and when it detects that the collection has changed, rewrites the index files. If enabled, it will send a trigger message to the TDS, and the TDS will reload that dataset. To enable this, you must configure the TDS with the tdsTrigger role, and add the user tdm with that role. Typically you do that by editing the ${tomcat}/conf/tomcat-user.xml file, eg:
<?xml version='1.0' encoding='utf-8'?> <tomcat-users> <role ... /> <role rolename="tdsTrigger"/> <user ... /> <user username="tdm" password="secret" roles="tdsTrigger"/> </tomcat-users>Make sure that the tdm user has only the tdsTrigger role, for security.
If you dont want to allow external triggers, for example if your datasets are static, simple dont enable the tdsTrigger role in Tomcat. You can also set trigger="false" in the update element in your catalog:
<update startup="never" trigger="false" />
Example configuration in the TDS configuration catalogs. Point the TDM to the content directory using -Dtds.content.root.path=<content directory> on the TDM command line.
Static dataset:
<featureCollection name="NOMADS CFSRR" featureType="GRIB2" harvest="true" path="grib/NOMADS/cfsrr/timeseries">
<metadata inherited="true"> <dataType>GRID</dataType> <dataFormat>GRIB-2</dataFormat> </metadata> <collection name="NOMADS-cfsrr-timeseries" spec="/san4/work/jcaron/cfsrr/**/.*grib2$"
dateFormatMark="#cfsrr/#yyyyMM" timePartition="directory"/>
<tdm rewrite="always"/>
</featureCollection>
- rewrite="always" tells the TDM to index this dataset upon TDM startup.
- A log file will be written to fc.NOMADS-cfsrr-timeseries.log in the TDM working directory.
- The TDS will use the existing indexes, it does not monitor any changes in the dataset.
Dynamic dataset:
<featureCollection name="DGEX-Alaska_12km" featureType="GRIB2" harvest="true" path="grib/NCEP/DGEX/Alaska_12km"> <metadata inherited="true"> <dataType>GRID</dataType> <dataFormat>GRIB-2</dataFormat> </metadata> <collection name="DGEX-Alaska_12km" spec="/data/ldm/pub/native/grid/NCEP/DGEX/Alaska_12km/.*grib2$" dateFormatMark="#DGEX_Alaska_12km_#yyyyMMdd_HHmm" timePartition="file" olderThan="5 min"/> <tdm rewrite="true" rescan="0 0/15 * * * ? *" trigger="allow"/> <update startup="never" trigger="allow" /> </featureCollection>
- <tdm> element for the TDM
- rewrite="test" tells the TDM to test for dataset changes
- rescan="0 0/15 * * * ? *" rescan directories every 15 minutes.
- <update> element for the TDS
- startup="never" tells the TDS to read in the featureCollection when starting up, using the existing indices
- trigger="allow" enables the TDS to recieve messages from the TDM when the dataset has changed
More complicated configuration can be done in the Spring configuration inside the jar file /resources/application-config.xml:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">
<bean id="executor" class="java.util.concurrent.Executors" factory-method="newFixedThreadPool"> 1) <constructor-arg type="int" value="4"/> </bean>
<bean id="completionService" class="java.util.concurrent.ExecutorCompletionService"> <constructor-arg type="java.util.concurrent.Executor" ref="executor"/> <constructor-arg type="java.util.concurrent.BlockingQueue" ref="completionQ"/> </bean>
<bean id="testDriver" class="thredds.tdm.TdmRunner"> <property name="executor" ref="executor"/> 2) <property name="catalog" value="classpath:/resources/indexNomads.xml"/> <property name="serverNames"> <list> 3) <value>http://motherlode.ucar.edu:8081/</value> <value>http://motherlode.ucar.edu:9080/</value> </list> </property> </bean>
</beans>
where:


{% extends "../../_base.html" %} {% load static %} {% block content %}
Your password was changed successfully.


MOVEMBER
Registered to Change the Face of Men's Health
You're Registered and Ready to Go! Please Login Below.
Log In


Ospreys 13 Munster 32: Jeremy Loughman the star man as van Graan's men seal last-gasp bonus point win over Ospreys
Ex-Leinster man Jeremy Loughman scored the only try in the first half at Liberty Stadium
by David JonesJeremy Loghman was awesome while Munster began the Champions Cup with a crucial bonus point win away to Ospreys.
Ex-Leinster man Jeremy Loughman scored the only try in the first half at Liberty Stadium.
Keith Earls and Andrew Conway added a couple of tries after the break and James Cronin scored the bonus point effort.
Munster were 13-6 in front at half-time but it could have been more after a brilliant opening half from the visitors.
Tyler Bleyendaal was inspirational but it was Ospreys out-half Luke Price who scored first, from a eighth minute penalty after Munster strayed offside.
But Munster stepped it up a notch at the end of the first half with a couple of relentless drives towards the Ospreys line. The latter saw Loughman emerge at the end of the move to touch down a deserved try in the 34th minute.
Munster’s second try came from a lineout when Tommy O’Donnell got through down the blindside.
Loughman almost scored his second try but Earls scored when the ball was recycled.
That score came in the 50th minute and two minutes later Conway raced clear down the right wing after Loughman was involved in the build-up again.
If you haven't already, be sure to like our Irish Mirror Sport and Irish Mirror GAA pages on Facebook and follow us on Twitter.
How to follow the Irish Mirror on social media
You can like our main Facebook page here.
Our Irish Mirror Sports page - which brings you all your Irish and UK sports news - can be found here.
You can also check out our Irish Mirror GAA sports page.
The Irish Mirror Twitter account is @IrishMirror while our sports account is @MirrorSportIE.
Our Instagram account can be found here.


My Fellow Americans (1996) Comedy *** (out of ****) 1996, 101 minutes
Starring: Jack Lemmon, James Garner, Dan Aykroyd, John Heard, William Brimley, Everett McGill, Lauren Bacall
Political scandals and impeachment all go through today's political market. I simply get tired of this, so I decided to take a break to watch My Fellow Americans on HBO. This movie has to be one of the best political-comedy movies I have seen in a long time. Jack Lemmon simply shines in his role as Russel Kramer (Former Republican ex-President). James Garner plays Matt Douglas, a Democratic successor and a long-time rival of Kramer. Three years after losing to Kramer's V.P., Bill Haney, Matt Douglas finds himself with another chance at being Commander-in-Chief when a scandal prepares to blow involving Olympia (A kickback to the Kramer-Haney term). The demoractic party's support awaits Douglas to see if he can get evidence to get his old foe back, but Kramer knows enough to prove he knew nothing about Olympia. Both ex-Presidents discover the plot thickens when a witness turns up dead, and a helicopter they were on, blows to smithereens over the Blue Ridge Mountains in North Carolina. After these actions, Kramer & Douglas have to get to Kramer's presidential library in Ohio for evidence that would bring Haney down. This movie has to be one you have to rent for a weekend. There are some excellent parts in here. Notice the part in the bathroom stalls with the redneck guy trying to shake Douglas's hand, but Douglas refuses and says, "I have to keep my hands on the First Penis". As soon as the guy leaves, Kramer asks, "The First Penis?". Douglas shoots back, "Yeah, that is what I am thinking of naming it from now on. Isn't that right, Blinky?". This movie really gets good when both men find themselves escaping from the Government agents out to assassinate them. They go into a parade, only to realize they are marching in a Gay Pride March. They meet "Dorothy", not a big character in the movie, but a crucial part. ("Dorothy": President Douglas, are you coming out? Douglas: I've always supported Gay Rights, but I am not coming out. (Points to Kramer): He is, however). This movie teaches you that there is a funny side to politics.  Watch for the part in the bathroom stall with Douglas in there. There is a hilarious Macarena joke included in that scene. Many people refer to this movie as "Grumpy Old Presidents, without Walter Matthau (Who was shooting I'm Not Rappaport at the time this movie was being filmed). It is not that way. It is just plain funny. At the end of the movie though, you will be quite surprised.
Go rent this movie whenever you can. As for me, I might as well buy it (That'll make 22 videos in my video drawer at least). Believe me, if any of our Presidents were this way, this country would be in much better shape.
Rory Aronsky
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


Research
DAIS Lab Research
We are at a unique historical moment with conditions ripe for a new industrial revolution that is going to take us to a level of automation that had never been seen before. This revolution is driven by a serendipitous confluence of ubiquitous cyber-physical systems or internet of things, gargantuan computing power, inexpensive memory and major algorithmic developments in machine learning and artificial intelligence. It is happening all around us in the form of self-driving cars to human-like robots.
The competitive global environment, and the ever increasing demands on energy, environment and quality are subjecting process industries to a high level of economic pressure. However, the process industries are in possession of treasure troves of heterogenous data that are gravely under utilized. These incredible volumes of data that industries already possess are poised to provide a level of insight and information never realized before and thus alleviate the economic and competitive pressures. We are interested in developing novel algorithms and computational tools to bring this vision of automation to the process industry.
Presentations
Group presentation slides: Link


--- layout: page title: Contact permalink: /contact/ ---
| Email: | {{ site.email }} |
| Company name: | JorAI B.V. |
| Chamber of Commerce: | 84638729 |
| VAT ID: | NL863292574B01 |
| LinkedIn: | {% include icon-linkedin.html user=site.linkedin_name %} |
| GitHub: | {% include icon-github.html username=site.github_username %} |


Listed below is a catalog of completed research projects by the students of MST Magnet in Camas High.
⌛ Loading...


The Educational Opportunity Program (EOP) honors a select number of students each year with the EOP Achievement Award. This award recognizes students who have worked to achieve academic excellence while contributing exemplary community service on campus and/or in the surrounding community.
The Process
For Students:
Award Application Criteria:
1. Must be an EOP student, meeting ANY of the 3 criteria below:
a. Low income (Pell Grant or Dream Act Scholarship eligible as verified by Financial Aid)
b. First generation college student
c. Historically underrepresented student
2. Must have demonstrated leadership and service on campus and/or the community-at-large
3. Must have a minimum UCB cumulative grade point average of 3.0
4. Must have Junior or Senior standing by the beginning of the Spring 2015 semester
Transfer Students Only: Must have completed a minimum of 30 units at UCB by the beginning of the Spring 2015 semester.
5. Must be registered as a full-time undergraduate student (extenuating circumstances will be considered)
Students who meet the above criteria are encouraged to complete and return the online application, a personal essay, a statement of plans after graduation, a resume, and one letter of recommendation to:
Avisha Chugani, Academic Counselor, UC Berkeley Educational Opportunity Program
Mailing Address: 119 Cesar Chavez Student Center, Berkeley, CA 94720-4210
Email:
<EMAIL_ADDRESS>For Coordinator:
*See planning stages document and link to
Achievement Awards Google Drive Folder


{% extends "base.html" %} {% block title %}Home{% endblock %} {% block frontpageheader %}
Going shopping? Need a list? Do it here!
{% if request.oauth.credentials.id_token %} {% else %} {% endif %}An example shopping list application for a Google Apprenticeship in Digital Innovation application.
Build a simple webapp, using google app engine that provides users with an ability to keep track of a shopping list
Should be written in Python, Go, or Java.


At Michigan, I focus on cyber-physical attacks and defenses. I am
currently working on several projects. Feel free to send me an
email for details.
Undergraduate Research Assistant
2015 - 2016
Clemson University, Clemson
At Clemson I primarily worked on ultra low power sensing network
research with my undergraduate research advisor Jacob Sorber
and then PhD student, now assistant professor Josiah Hester.
There we produced one paper which can be found here
.


RT @cascadiaruby: Cascadia Ruby is back for 2014! August 11 & 12 in Portland, OR. CFP & registration are now open - go get 'em! http://t.co…
4/15/2014, 6:59:47 PM
Favs: 0
Retweets: 0
link--- layout: tweet ---
RT @cascadiaruby: Cascadia Ruby is back for 2014! August 11 & 12 in Portland, OR. CFP & registration are now open - go get 'em! http://t.co…
4/15/2014, 6:59:47 PM
Favs: 0
Retweets: 0
link


Name
John Lane
Change
Enter New Name:
Email address
<EMAIL_ADDRESS>Address
111 Pioneer Way, Mountain View, CA 94041, USA
Update
Enter New Address:
Address Line 1:
Address Line 2:
City:
State/Province/Region:
ZIP/Postal Code:
Country:
Phone
+1<PHONE_NUMBER>
Enter New Phone No.:
Password
**********
Type your old password:
Type your new password:
Confirm your new password:
Plan
Pro
Select Store:
Store Name
Toms Organic Farm
Enter New Store:
Website
www.tomorganic.com
Enter New Website:
Default Currency
USD
Enter New Currency:
Timezone
Central Daylight Time (GMT-5:00)
Select New Timezone:
Data Sources
Google Analytics, PayPal, Stripe, Magento
Add
Recipient ID
Permissions
Actions
Bill G
<EMAIL_ADDRESS>View
Edit
Change Permissions:
Admin
Delete User
James Chang
<EMAIL_ADDRESS>Sam G
<EMAIL_ADDRESS>Tan Chang
<EMAIL_ADDRESS>Name:
Recipient ID:
Permissions:
Notifications
On
Notifications:
Weekly
Monthly


Events
digest-details-sk
digest-details-sk with triaging disallowed
digest-details-sk negative only
digest-details-sk no other digests
digest-details-sk no other digests with triaging disallowed
digest-details-sk digests being computed
digest-details-sk with changelist ID
digest-details-sk with right side overridden
digest-details-sk with no trace data sent by backend
digest-details-sk with no param data send by backend
digest-details-sk with full-size images


Exercise (Week 6)
Table of Contents
DUE: Tue 16 July 2019 14:00:00
Download the exercise tarball and extract it to a directory in your
home directory at CSE. This tarball contains a file, called Ex04.hs
,
wherein you will do all of your programming.
To test your code, run the following shell commands to open a GHCi session:
$ 3141 newclass starting new subshell for class COMP3141... $ cabal repl Resolving dependencies... Configuring Ex04-1.0... Preprocessing executable 'Ex04' for Ex04-1.0.. GHCi, version 8.2.2: http://www.haskell.org/ghc/ :? for help [1 of 1] Compiling Ex04 (Ex04.hs, interpreted) Ok, one module loaded. *Ex04> calculate "1 1 +" ...
Note that you will only need to submit Ex04.hs
, so only make changes
to that file.
Download the exercise tarball and extract it to a directory on
your local machine. This tarball contains a file, called Ex04.hs
,
wherein you will do all of your programming.
To test your code, run the following shell commands to open a GHCi session:
$ stack repl Configuring GHCi with the following packages: Ex04 Using main module: 1. Package 'Ex04' component exe:Ex04 ... GHCi, version 8.2.2: http://www.haskell.org/ghc/ :? for help [1 of 2] Compiling Ex04 (Ex04.hs, interpreted) [2 of 2] Compiling Main (Main.hs, interpreted) Ok, two modules loaded. *Main Ex04> calculate "1 1 +" ...
Note that you will only need to submit Ex04.hs
, so only make changes
to that file.
1 Reverse Polish Notation
The Reverse Polish Notation is a common way to represent arithmetic expressions, where each operator appears after the operands it works on. Below are a number of examples in a sample GHCi session. Your task in this exercise is to develop a RPN calculator using a variety of monadic functions. You should be able to evaluate the same examples to the same results after you have completed this exercise:
*Ex04> calculate "3 4 +" Just 7 *Ex04> calculate "3 4 - 5 +" Just 4 *Ex04> calculate "3 4 2 / *" Just 6 *Ex04> calculate "3 4 2 / * +" Nothing
Generally, evaluation of RPN proceeds by looking at each token (number or operator), one at a time. We evaluate a number by pushing it on to
a stack, and we evaluate an operator o
by popping two numbers y
and x
from the stack, and pushing o x y
back on. The number left on
the top of the stack at the end of evaluating is the result of the expression.
1.1 Parsing (1 Mark)
We define a Token
as either a number or a binary operator:
data Token = Number Int | Operator (Int -> Int -> Int)
First, we need a way to translate String
values into proper calculable expressions, that is, lists of Token
. We have already defined a function that will attempt
to convert a single word into a single Token
, called parseToken
:
parseToken :: String -> Maybe Token parseToken "+" = Just (Operator (+)) parseToken "-" = Just (Operator (-)) parseToken "/" = Just (Operator div) parseToken "*" = Just (Operator (*)) parseToken str = fmap Number (readMaybe str)
Your first task is to implement the function tokenise
:
tokenise :: String -> Maybe [Token]
This function must break the string into words (the built-in words
function will be useful), and then attempt to parse each one into a Token
, returning
a non-Nothing
result only if every word can be parsed.
Note that you can (and should) exploit the fact that Maybe
is an instance of Monad
, Applicative
and Functor
. This will enable you to make the above function
into a short, one-line definition.
1.2 Stack Operations (2 Marks)
Next, in order to evaluate RPN expressions, we need a convenient way to model computations which manipulate a stack, and can possibly fail (for example, if we were to try to pop from an empty stack).
In Haskell, such a computation could be modelled as a function that, given an input stack (of Int
), will either fail
(returning Nothing
) or return Just
an output stack with an additional return value.
newtype Calc a = C ([Int] -> Maybe ([Int], a))
Implement the two basic stack operations, push
and pop
as Calc
computations.
pop :: Calc Int push :: Int -> Calc ()
1.3 Evaluating (3 Marks)
We have provided instances of Monad
, Applicative
and Functor
for Calc
:
instance Functor Calc where fmap f (C sa) = C $ \s -> case sa s of Nothing -> Nothing Just (s', a) -> Just (s', f a) instance Applicative Calc where pure x = C (\s -> Just (s,x)) C sf <*> C sx = C $ \s -> case sf s of Nothing -> Nothing Just (s',f) -> case sx s' of Nothing -> Nothing Just (s'',x) -> Just (s'', f x) instance Monad Calc where return = pure C sa >>= f = C $ \s -> case sa s of Nothing -> Nothing Just (s',a) -> unwrapCalc (f a) s' where unwrapCalc (C a) = a
All three instances make sure that the whole computation will return Nothing
if any subcomputation returns Nothing
. Furthermore, the
Applicative
and Monad
instances allow us to thread the stack through multiple computations without manually keeping track of this state. For example, the
Calc
computation that adds the two topmost elements of the stack and pushes the result back to the stack can be defined as:
addTwo :: Calc () addTwo = do x <- pop y <- pop push (x + y)
By threading the stack through in the Monad
instance here, we can just treat the stack as some implicit state that we manipulate abstractly with Calc
computations. This allows us to make code much shorter and cleaner.
Using the above instances for Calc
, define a function evaluate
:
evaluate :: [Token] -> Calc Int
This should evaluate a list of Token
as described above, using the stack operations you defined earlier, finally returning the topmost element of
the stack.
1.4 Putting it together (1 Mark)
Lastly, define a function calculate
:
calculate :: String -> Maybe Int
That will first attempt to parse the given string with tokenise
to get a list of tokens.
If that succeeds, it should use evaluate
to get a Calc
computation corresponding to that list of tokens.
Then, it should run that computation starting with an empty stack, returning just the resultant integer from that computation, if any.
If the stack has more than one element when calculate
runs, it should return the topmost element.
Note that once again you can use the Monad
, Applicative
and Functor
instances of Maybe
to succinctly implement this function.
After implementing this function, test it with the examples listed at the beginning of this exercise, and try your own examples also.
2 Peer review (2 Marks)
Now that you've all made some fantastic artworks, we'd like each of you that submitted a picture to review one other student's picture. To do this, just log in to the peer review form here, and answer the questions the form asks you. Make sure you review carefully and kindly, because your review will be posted on the gallery page for that picture, and your identity is revealed to the person who made the image. To check the reviews for your own artworks, you can click here.
3 Submission instructions
You can submit your exercise by typing:
$ give cs3141 Ex04 Ex04.hs
on a CSE terminal, or by using the give
web interface. Your file must be named Ex04.hs
(case-sensitive!).
A dry-run test will partially autotest your solution at submission time. To get full marks, you will need to perform further testing yourself.


'Glee' actress Jane Galloway Heitz dead at 78
by Will ThorneJane Galloway Heitz, known for playing the character of Lillian Adler on “Glee,” has died, according to an obituary posted in the Chicago Tribune. She was 78.
The actress only appeared in person twice on the Fox show, once in the pilot and on another occasion in 2015, as her character’s image appeared in a trophy case commemorating her life. A quote from Lillian, “By its very definition, Glee is about opening yourself up to joy,” was visible on a plaque and helped inspire Will, played by Matthew Morrison, to pursue his dream of becoming the glee club director. Galloway Heitz’s character was herself a former head of glee club at McKinley High.
TERRY O’NEILL, CELEBRITY PHOTOGRAPHER OF ’60S AND ’70S, DIES AT 81
Galloway Heitz also played the character of Mildred in a 2009 episode of “The Big Bang Theory” on CBS, and Claire in a 2012 episode of “Shameless.” Her other TV credits include “Grey’s Anatomy,” “ER,” “Monk,” “Prison Break,” “CSI: Crime Scene Investigation,” “Without a Trace” and “Early Edition.”
BRANKO LUSTIG, ‘SCHINDLER’S LIST’ PRODUCER AND HOLOCAUST SURVIVOR, DIES AT 87
On the film side, Galloway Heitz starred alongside Richard Farnsworth and Sissy Spacek in David Lynch’s 1999 road movie “The Straight Story.” She also played a nurse opposite Lindsey Lohan in the 2007 psychological thriller “I Know Who Killed Me.” In 2001, Galloway Heitz played the intriguingly named Dinah the Drunk in the French-American movie “Just Visiting” with Jean Reno and Christina Applegate. The film was a remake of the wildly popular French fantasy comedy “Les Visiteurs,” but unlike the original, it turned out to be a box office flop.
VIRGINIA LEITH, FEMALE LEAD IN STANLEY KUBRICK’S FIRST FILM, DIES AT 94
She is survived by her daughter Amie (Rod) Richardson, and three grandchildren. Her funeral service will take place at the Church of Our Savior in Elmhurst, IL. on Nov. 30.
This story originally appeared on Variety.


Details
Developed an entire web application which is used for Setting up and Updating customer accounts for the company.
Application is built on JavaScript, PHP and hosted by using Amazon Web Services.
Application is built on PHP Laravel framework.
Following Web Services are used for building this application: Amazon EC2 instances, RDS, S3, Route 53.
Received appreciation from higher management for completing the application within a short span of time.


 It would have been better with about thirty minutes of boredom cut out and if, perhaps, the director had coaxed a better performance out of Christopher Walken. I like the guy and think he's a decent actor and definitely one of the strangest individuals on the planet (good to know I'm not alone), but as villain Zorin he's way too bland.
Roger Moore makes his seventh and final appearance as James Bond, and I think it was about time for the guy to step down. In this one, he just doesn't seem too enthusiastic about being the single most indestructible babe magnet on the planet. Of course, I wouldn't be able to manfacture much enthusiasm either if I had to sleep with Grace Jones. That's a nasty-looking woman right there.
The plot this time has Walken as an ambitious microchip manufacturer who plans to create an earthquake that will destroy Silicon Valley, eliminating his competition. Maybe that's where Bill Gates got the idea to send the CEO's of Atari and Commodore 64 to sleep with the fishes. Grace Jones, the least feminine woman out there (Sandra Bernhard being the runner-up in that competition) is his musclebound assistant, May Day. Her name, of course, comes from the phrase shouted by every man who's ever seen her topless. And as usual, it's up to James Bond to stop everything.
 It's got all the violence and chase scenes, some that are fun, some absurd. The sequence with Bond hanging from a fire truck ladder falls into the latter category (Latter. Ladder. Get it?), as does the entire last twenty minutes of the movie, which I'll just say involves a dirigible and the Golden Gate bridge. Still, nearly every James Bond movie is better than this one, which should be watched only by true fans of the series.
Visit the Movie Critic at LARGE website at http://www.missouri.edu/~c667778/movies.html
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Yep, I'm a dialog...
Dummy text
rmodal.js
A simple modal dialog
Plain JavaScript only - no dependencies
IE9+ supported
Less than 1.3KB when gzipped and minified
Animate.css friendly
Fully unit tested
Show modal


{% comment %} For some reason, using "if record.dcc_review.study_response is not None" doesn't work here. {% endcomment %} {% if not record.dcc_review.study_response and not record.archived %}


BlockPy is a web-based Python environment that lets you work with blocks, text, or both. Designed for Data Science, equipped with powerful tools like the State Explorer, and scaffolding beginners with Guided Feedback, the goal of BlockPy is to let you authentically solve real-world problems.
The CORGIS Datasets Project seeks to make highly-motivating introductory computing experiences through simple, easy-to-pick-up datasets for beginners. We offer a wide range of libraries for many different programming languages and contexts.


The IContractResolver interface provides a way to customize how the JsonSerializer serializes and deserializes .NET objects to JSON.
Implementing the IContractResolver interface and then assigning an instance to a JsonSerializer lets you control whether the object is serialized as a JSON object or JSON array, what object members should be serialized, how they are serialized and what they are called.
DefaultContractResolver
The DefaultContractResolver is the default resolver used by the serializer. It provides many avenues of extensibility in the form of virtual methods that can be overriden.
CamelCasePropertyNamesContractResolver
CamelCasePropertyNamesContractResolver inherits from DefaultContractResolver and simply overrides the JSON property name to be written in camelcase.
Product product = new Product
{
ExpiryDate = new DateTime(2010, 12, 20, 18, 1, 0, DateTimeKind.Utc),
Name = "Widget",
Price = 9.99m,
Sizes = new[] {"Small", "Medium", "Large"}
};
string json =
JsonConvert.SerializeObject(
product,
Formatting.Indented,
new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }
);
//{
// "name": "Widget",
// "expiryDate": "\/Date(1292868060000)\/",
// "price": 9.99,
// "sizes": [
// "Small",
// "Medium",
// "Large"
// ]
//}


Sasha's links index
Main pages
Sasha's public page - interesting intellectual and frontier resources
Interesting things in Boston
Bostonian extropians
World Future Society page with a good list of futurist resources
best mailing lists
Frontier organizations on the Web
excellent list of hot links
Artificial Intelligence and related resources
Great Thinkers and Visionaries site
a collection of interesting futuristic and philosophical essays
best Web Services
good sources of Software
A collection of Educational resources, including those on gifted children
a few funny erotic (kinda) pictures
some Fun and Games resources
Russian Web references
Massage directory
Money and sponsor page
Karate directory
People at Software House page.
Circumcision book
Essays
Hypereconomy essay
excellent essays on futuristic topics
Cyborgs Hyper-essay
Brilliant work on Enhanced Reality and Intelligent Filters
Mind Age and fluid transhuman intelligence
Futurist and philosophical essays and projects
future of Automated Collaborative Filtering
Advanced document rating system proposal
Some interesting thoughts on futurology
interesting remarks on evolution of science and fiction
Some thoughts on philosophical foundations of abortions issues
an interesting essay on Idea Futures
Living systems
some unusual ideas on identity
Article on classes of theories
An essay on technological enhancements of humans
Semantic Web essay - a draft proposal for the future of content-aware Web.
Article on Aerial robotics
Article on the nature of humor
Projects
News filtering project
Humor
A collection of very funny and witty texts
hilarious intelligent humor
Entry pages
Real Celebrities?
Future of Robots
Famous thinkers on the Web
From Virtual to Enhanced Reality
From Virtual to Augmented Reality
Book lists
Chomsky books
circumcision books
Artur Clarke books
books about Leonardo DaVinci
books
books
books
books
books
books
books
books
books
books
books
books
books
books
books
books
books
books
books
books
books
books
books
books
books
books
books
books
books
books
books
Backlinks
This guide can be found on
Lucifer
and
Media Lab
servers


--- layout: nb-post title: "Implicit Recommender Systems - Biased Matrix Factorization" author: Will Kirwin github: wkirwin tags: [Machine Learning, Recommender Systems] ---
In today's post, we will explain a certain algorithm for matrix factorization models for recommender systems which goes by the name Alternating Least Squares (there are others, for example based on stochastic gradient descent). We will go through the basic ALS algorithm, as well as how one can modify it to incorporate user and item biases.
We will also go through the ALS algorithm for implicit feedback, and then explain how to modify that to incorporate user and item biases. The basic ALS model and the version from implicit feedback are discussed in many places (both online and in freely available research papers), but we aren't aware of any good source for implicit ALS with biases... hence, this post.
Recommendation engines are becoming ubiquitous in the modern consumer landscape. From Netflix's personalized movie recommendations to Amazon's raft of suggested items (New For Your, Recommendations for You in the Kindle Store, etc...), to Spotify's wildly popular personalized Discover Weekly Playlist, recommendation engines have become an essential tool for promoting content discovery and extending consumer engagement.
There has been a proliferation of algorithms in the data science community upon which recommender systems are built, but they all follow the basic central dogma that similar users like similar items. The hard part, of course, is deciding exactly what "similar" means and how to measure it. For Netflix, similar users are users who rate movies similarly. For Spotify, similar users are users who listen to the same kinds of music (a little thought will convince you that these two ideas, while similar, are not really the same).
The simplest type of recommender system, called a collaborative filter, is essentially a literal interpretation of "similar users like similar things" Goldberg1992. Once a metric for similarity is decided on, one just looks at the top rated items of the $k$ nearest neighbors (with respect to the similarity metric), filters out those items which the user of interest has already seen/consumed, and voila: personalized recommendations.
Collaborative filters have the advantages of being relatively easy to implement and relatively easy to interpret (e.g. we recommended movie A to user 1 because users 2, 3, and 4 all rated it highly and have similar ratings profiles to user 1). This being the Age of Data Science, though, it is no longer enough to have a reasonable explanation. We can actually measure how effectively a recommender system predicts the ratings of users on unseen items. Thus began Netflix's famous quest for better recommender systems, leading to the famous million dollar prize and eventual solution Bell2008 (by a team of experts working for several years).
Although the recommender system that won the Netflix prize was never put into production (it was a carefully tuned mix of many statistical models, and the marginal gain obtained by implementing all of the models was not worth the technical price compared to simply implementing a few of the best ones), the data science community, and the wider commercial world, learned without a doubt that, while collaborative filters are explainable and easily implementable, one can do significantly better if one is willing to flex a bit of mathematical muscle.
There were essentially two types of recommender systems in the final solution to the Netflix prize, and they have become the bread and butter of the current state of the art: matrix factorization models and restricted Bolzmann machines (RBMs). We will discuss matrix factorization models in this post.
We will be interested in two refinements of the basic matrix factorization model for recommendations: using implicit feedback, and using user and item biases.
It was realized early on, even for collaborative filters, that recommender systems work a lot better if one accounts for user and item biases.
Suppose, for example, that we are trying to predict movie ratings and
Clearly 3 stars from Bob is very different than 3 stars from Alice. If we keep track of the average movie rating for each user (the user bias), and just try to predict the difference from that average, the recommender system works much better.
Similarly, suppose
Then a 3 star rating is very different for Snakes on a Plane than for The Shawshank Redemption. If we keep track of the average user rating for each movie (the item bias), and just try to predict the difference from that average, the recommender system also works much better.
Obviously, one should keep track of both user and item biases. (We will explain the technical details below.)
One of the challenges of recommender systems in the wider commercial world is that one rarely has explicit ratings data (Netflix strongly encourages users to rate movies and leverage the tech built around those ratings).
Instead, user-item interactions like clicks, purchases, song listens (or fast-forwards), etc, are used as a proxy to indicate a preference or distaste for a particular item (possibly very weakly). If a user listens to a song only once, maybe it indicates that they didn't like the song. However, maybe they were busy or weren't paying attention and actually would like to hear the song again. If a user listens to a song 100 times, it is a safe bet that they like the song. But it is hard to draw a line between unknown preference and known preference.
This kind of indirect information about user-item preferences is known as implicit feedback, and many smart people have thought long and hard about how to deal with it. We won't delve much into the modeling of implicit feedback in today's post. It turns out to be relatively effective to model a user's preference on a scale of 0 (bad) to 1 (good) instead of modeling the user's raw number of interactions (or whatever number is actually being measured).
We can interpret the number of user-item interations (song listens, for example) as a measure of our confidence in our model's prediction for the user's preference of the item.
Below, we'll step through the details of how a matrix factorization model can be used to deal with implicit feedback. The basic algorithm we discuss is from the seminal paper Hu2008.
The most basic matrix factorization model for recommender systems models the rating $\hat{r}$ a
user u
would give to an item i
by
where $x_u^T = (x_u^1, x_u^2, \dots, x_u^N)$ is a vector associated to the user, and $y_i^T = (y_i^1, y_i^2, \dots, y_i^N)$ is a vector associated to the item. The dimension of the vectors is the rank of the model, and the components are called factors.
We can collect the user-item ratings into a matrix $\widehat{R}=(\hat{r}_{ui})$. First collect
the user vectors into a matrix
$$X = \left(\begin{matrix} \vdots & \vdots & \cdots & \vdots \\
x_{u_1} & x_{u_2} & \cdots & x_{u_{n_\text{users}}} \\
\vdots & \vdots & \cdots & \vdots \end{matrix}\right),$$
and the item vectors into a matrix
$$Y = \left(\begin{matrix} \vdots & \vdots & \cdots & \vdots \\
y_{i_1} & y_{i_2} & \cdots & y_{i_{n_\text{items}}} \\
\vdots & \vdots & \cdots & \vdots \end{matrix}\right),$$
then we can express the above model as
Of course, there is no reason that the "true" user-item matrix $R = (r_{ui})$ should have rank $N$, and indeed, we won't even know the "true" user-item matrix. This model assumes that it can be approximated by a rank $N$ factorization:
$$ R \sim \widehat{R} = X^TY.$$In other words, we want to find an $n_\text{users}\times N$ matrix $X$ and an $n_\text{items}\times N$ matrix $Y$ such that $\widehat{R}:=X^TY$ approximates $R$.
One popular method for finding the matrices $X$ and $Y$ given partial information about $R$ is known as alternating least squares. The idea is to find the parameters $x^j_{u}$ and $y^j_{i}$ (the entries of the matrices $X$ and $Y$) which minimize the $L^2$ cost function
$$ C = \sum_{u,i\in\text{observed ratings}} (r_{ui} - x_u^T y_i)^2 + \lambda \left( \sum_{u} \|x_u\|^2 + \sum_{i} \|y_i\|^2 \right).$$The constant $\lambda$ is called the regularization parameter and essentially penalizes the components of the matrices $X$ and $Y$ if they get too large (in magnitude). This is important for numerical stability (and some kind of regularization is almost always used). It has an even more important effect in this setting, though:
Fundamental Observation: If we hold the item vectors $Y$ fixed, $C$ is a quadratic function of the components of $X$. Similarly, if we hold the user vectors $X$ fixed, $C$ is a quadratic function of the components of $Y$.
So in order to minimize $C$, one could try the following:
Some remarks are in order.
The above algorithm is called (for obvious reasons) alternating least squares.
A bit of linear algebra yields the following algorithm (see here, for example):
i
, let $r_i$ be the vector of ratings of that item (it will have
n_users
components; one for each user). Compute
$$y_i = \left(X^T X + \lambda I\right)^{-1} X^T r_i$$
for each item i
. ($I$ is the $N\times N$ identity matrix.)
u
, let $r_u$ be the vector of ratings of that user (it will have
n_items
components; one for each item).
Compute
$$x_u = \left(Y^T Y + \lambda I\right)^{-1} Y^T r_u$$
for each user u
.
Remark. It is almost always faster to solve the linear system $\left(X^T X + \lambda I\right)y_i = X^T r_i$ instead of inverting the matrix $\left(X^T X + \lambda I\right)$ as written in the algorithm (similarly for the user vectors).
As we mentioned above, it turns out that most recommender systems perform better if user and item biases are taken into account.
Suppose we have a ratings system that allows each user to rate each item on a scale of 1 to 5
stars. Suppose we have two users: Alice
, who rates items with an average of
4
stars, and Bob
, whose average rating is 1.5
stars. If
Bob
rates some new item with 3
stars, it means something very
different than if Alice
rates the same item with 3
stars
(Bob
really liked the new item, Alice
didn't). The difference
is what we call user bias.
For an explicit-ratings model (as discussed above, when we have explicit ratings for user-item pairs), one way to account for user bias is to model the actual user-item ratings as
$$r_{ui} \sim \beta_u + \hat{r}_{ui},$$where $\beta_u$ is the user bias of user
u
and $\hat{r}_{ui}$ is the model of whatever is left over; for example, $\hat{r}_{ui}
= x^T_uy_i$ if we use the matrix factorization model discussed above. We can account for item bias
in a similar way:
here, $\gamma_i$ is the item bias of
item i
.
Remark. If instead of matrix factorization we used a traditional
collaborative filter, we would define $\hat{r}_{ui}$ via $k$-nearest neighbors using some
similarity metric (Pearson is a standard choice), $\beta_u$ is the average rating of user u
over all items, and $\gamma_i$ is the average rating of item i
over all users.
User and item biases can be directly incorporated into the ALS algorithm. We model the user-item ratings matrix as
$$r_{ui} \sim \beta_u + \gamma_i + x^T_u y_i$$and minimize the cost function
$$ C^\text{biased} = \sum_{u,i\in\text{observed ratings}} (r_{ui} - x_u^T y_i)^2 + \lambda \left( \sum_{u} \left( \|x_u\|^2 + \beta_u^2\right) + \sum_{i} \left(\|y_i\|^2 + \gamma_i^2\right) \right).$$Again, because of the regularization, we can hold the user variables fixed and solve for the minimum in the item variables. Then we can hold the item variables fixed and solve for the minimum in the user variables.
The biases $\beta_u$ and $\gamma_i$ appear in $C^\text{biased}$ without any coefficients, whereas all the other parameters appear at least once with some coefficient. So one approach would be to solve for the biases separately from the other parameters in each step.
It is easier, though, to leverage the work we've already done. We can rewrite our cost function at each step so that it looks like an unbiased model, and then just use the same formulas we found above for the unbiased ALS. The trick is to define new vectors that include the biases as components in the right way.
Let $\beta$ be the vector of user biases (with n_users
components) and $\gamma$ the
vector of item biases (with n_items
components). Here is the algorithm:
i
, define three new vectors :
$$r^\beta_i := r_i - \beta$$
with components $r^\beta_{ui}:= r_{ui}-\beta_u$ (notice that both vectors have
n_users
components),
$$\tilde{x}^T_u := (1, x^T_u),$$
and
$$\tilde{y}^T_i := (\gamma_i, y^T_i).$$
Then $C^\text{biased} = \sum \left(r^\beta_{ui} - \widetilde{x}_u^T\widetilde{y}_i \right)^2
+ \lambda\left( \sum_u \|\widetilde{x}_u\|^2 + \sum_i \|\widetilde{y}_i\|^2\right)$. Hence,
we find that the item bias and vector can be computed as
$$ \widetilde{y}_i := \left(\begin{matrix} \gamma_i \\ y_i\end{matrix}\right) =
\left(\widetilde{X}^T \widetilde{X} + \lambda I\right)^{-1} \widetilde{X}^T r^\beta_i.$$
($I$ is now the $(N+1)\times(N+1)$ identity matrix, and $\tilde{X}$ and $\tilde{Y}$ are
matrices whose columns are the vectors $\tilde{x}_u$ and $\tilde{y}_i$ as usual.)
u
, define three new vectors:
$$r^\gamma_u := r_u - \gamma,$$
$$\widetilde{y}^T_i := (1, y_i),$$
and
$$\widetilde{x}^T_u := (\beta_u, x_u).$$
The user bias and vector can be computed as
$$ \widetilde{x}_u := \left(\begin{matrix} \beta_u \\ x_u\end{matrix}\right) =
\left(\widetilde{Y}^T \widetilde{Y} + \lambda I\right)^{-1} \widetilde{Y}^T r^\gamma_u.$$
For many real-world user-item interactions there are no explicit rating data available. However, there is often nontrivial information about the interactions, e.g. clicks, listens/watches, purchases, etc. Such indirect "ratings" information about user-item interactions is known as implicit feedback. Modeling implicit feedback is a difficult but important problem. There are several ways to use the ALS matrix factorization to approach such a model. We present here a standard solution, presented (without bias corrections) in Hu2008.
The basic approach is to forget about modeling the implicit feedback directly. Rather, we want to
understand whether user u
has a preference or not for item i
using a
simple boolean variable which we denote by $p_{ui}.$ The number of clicks, listens, views, etc,
will be interpreted as our confidence in our model.
Following the fundamental idea of matrix factorization models, we try to find a user vector $x_u$
for each user u
and an item vector $y_i$ for each item i
so that
$$p_{ui} \sim x^T_u y_i.$$
It is important to note that we never actually observe $p_{ui}$! (This is a very different
situation than the explicit feedack models, as discussed above, where $r_{ui}$ is the observer
rating.)
Let's assume the our implicit feedback is a positive integer (number of clicks, number of views, number of listens, etc). That is, $$r_{ui} = \text{# of times user }\mathtt{u}\text{ interacted with item }\mathtt{i}.$$
How do we go about finding the vectors $x_u$ and $y_i$ given some implicit feedback $\{r_{ui}\}$? If a user has interacted with an item, we have reason to believe that $p_{ui}=1$. The more they have interacted with that item, the stronger our belief in their preference.
To define our model, set $$ p_{ui} = \begin{cases} 1 & \text{if }r_{ui}>0\\ 0 & \text{if }r_{ui}=0.\end{cases}$$ We try to minimize the following cost function: $$ C_\text{implicit} := \sum_{u,i\in\text{observed interactions}} c_{ui}\left(p_{ui} - x^T_u y_i \right)^2 + \lambda \left(\sum_u \|x_u\|^2 + \sum_i \|y_i\|^2\right),$$ where $c_{ui}$ is our confidence in $p_{ui}.$ That is, the more a user has interacted with an item, the more we penalize our model for incorrectly predicting $p_{ui}.$
If a user has never interacted with an item, it is possible that $p_{ui}=1$ and the user has just never encountered the item. It is also possible they are actively avoiding the item. To deal with this ambiguity, it is common to define the confidence by $$c_{ui}:=1 + \alpha r_{ui},$$ where $\alpha$ is a parameter of the model that needs to be tuned to the dataset. There is some empirical evidence that setting it to the sparsity ratio (the ratio of nonzero entries to zero entries) works well; missing entries are often interpreted as slightly negative, and so one could interpret $\alpha$ as balancing positive and negative interactions. See Johnson2014, for example. Another possibility that works well (and makes the model more robust against power users -- those users who interact with items orders of magnitude more often than the average user), which is also mentioned in Hu2008, is to set $$c_{ui} = 1 + \alpha\log(1+r_{ui}/\epsilon),$$ where $\epsilon$ is yet another data-dependent parameter of the model.
The basic idea of the ALS algorithm for matrix factorization applies to minimizing $C_\text{implicit}$: if we hold the user (resp. item) vectors fixed, then $C_\text{implicit}$ depends quadratically on the item (resp. user) vectors. That means we can do the same thing: hold the user vectors fixed and solve for the minimum in the item variables, then hold the item vectors fixed and solve for the minimum in the user variables, and repeat...
Of course, our cost function $C_\text{implicit}$ is slightly different, so the actual steps involving solving for the minimum look a bit different. The algorithm is as follows.
i
, let $p_i$ be the vector whose components are $p_{ui}$ (for
fixed i
, there will be n_users
components), let $C^i$ be the
diagonal matrix with $c_{ui}$ for fixed $u$ along the diagonal, and let $d_i = C^i p_i$ (the
reason for defining $d_i$ separately will be explained in the remarks about the
numpy
implementation below). Compute
$$y_i = \left(X^TC^iX+\lambda I\right)^{-1}X^Td_i.$$
u
, let $p_u$ be the vector whose components are $p_{ui}$ (for
fixed u
; there will be n_items
components), let $c_{u}$ be the
vector whose components are $c_{ui}$, let $C^u$ be the diagonal matrix with $c_u$ along the
diagonal, and let $d_u=C^u p_u$. Compute
$$x_u = \left(Y^TC^uY + \lambda I\right)^{-1}Y^Td_u.$$
Remarks
i
, and can be computed once and
reused at each step of the algorithm (similarly for $Y^TY+\lambda I$ in step 3).
numpy
Implementation of ALS for Implicit FeedbackIt turns out that the matrix multiplication $X^TC^iX$ and the matrix-vector product $X^Td_i$ are
both easier to implement in numpy
than to express in standard linear algebra
notation. A direct implementation of the algorithm is of course possible, but a small bit of
thought improves performance vastly.
numpy
Implementation NotesA direct implementation of the matrix product $X^TC^iX$ would be something like
Ci = np.diag(c[i])
XTCiX = np.dot(X, np.dot(Ci, np.dot(X.T)).
But the matrix product np.dot(X, Ci)
is just multiplying the rows of $X$, in order,
by the diagonal elements of $C^i$, which is achieved very efficiently by simple
numpy
broadcasting. So we can achieve the same matrix product via
XTCiX = np.dot(c[i] * X.T, X).
Moreover, since $d_i = p_i + \alpha r_i$ (which follows from $p_{ui} r_{ui} = r_{ui}$), we can rewrite the algorithm in terms of just the scaled raw counts $\alpha R$ and the preference $p$ as $$y_i = \left(X^TX+\lambda I + \alpha X^TR^iX\right)^{-1}X^T(p_i + \alpha r_i).$$
Hence, we can completely avoid constructing the diagonal matrices $C^i$ and $C^u$.
Finally, when n_users
and n_items
are large, $R$ (and hence $p$) will
generally be sparse matrices. The matrix $\left(X^TX+\lambda I + \alpha X^TR^iX\right)$ is,
however, $N\times N$ and since the number of factors is generally small (on the order of 10),
there is no great savings by using a sparse implementation of this matrix. On the other hand,
only the user vectors corresponding to nonzero entries of $r_i$ (and $p_i$) are needed in the
computation of $X^TR^iX$ and of $X^T(p_i + \alpha r_i)$, so if the algorithm is parallelized, it
is very useful to only ship those vectors to the workers doing the computation for
$y_i$ (this is, for example, how the Spark
implementation works). Our implementation is not parallelized (for the sake of clarity),
so we don't need to worry about shipping data to workers.
As with the standard matrix factorization model, matrix factorization models for implicit feedback tend to work better if user and item biases are accounted for; we introduce parameters $\beta_u$ and $\gamma_i$ as before, and try to fit a model $$p_{ui} \sim \beta_u + \gamma_i + \hat{p}_{ui},$$ where $\hat{p}_{ui} = x^T_u y_i$ as above, by minimizing the cost function $$C_{implicit}^{biased} := \sum_{u,i\in\text{observed interactions}} c_{ui}\left(p_{ui} - \beta_u - \gamma_i - x^T_u y_i \right)^2 + \lambda \left(\sum_u (\|x_u\|^2 + \beta_u^2) + \sum_i (\|y_i\|^2 + \gamma_i^2)\right).$$
The interpretation of the biases in this case is slightly different:
Again, the principle of the ALS algorithm applies with appropriate modifications for the new cost function $C^\text{biased}_\text{implicit}$. The algorithm is:
The same remarks apply as for biased ALS and implicit ALS.
In a future post we will compare the matrix factorization algorithms we discussed here on real-world data and see that, indeed, accounting for user and item biases is worth the extra effort.
I would like to thank Josh Hemann and Spencer Stirling for carefully reading drafts of this post and making many useful suggestions. I would also like to thank Sergiy Matusevych for finding some important typos and making hepful comments.
D. Goldberg, D. Nichols, B. M. Oki, D. Terry, Using Collaborative Filtering to Weave an Information Tapestry, Comm. ACM 35 (1992) pp 61 -- 70.
R. M. Bell, Y. Koren, C. Volinsky, The BellKor 2008 Solution to the Netflix Prize
Y. Hu, Y. Koren, C. Volinsky Collaborative Filtering for Implicit Feedback Datasets 8th IEEE International Conference on Data Mining, pp. 263 -- 272.
C. Johnson Logistic Matrix Factorization for Implicit Feedback Data


Store Title Inventory
Add equipment
Remove equipment
Inventory
Companies
Product
Available
Quantity
Edit
Edit