Trump says he doesn't think China is 'stepping up' in trade talks
AUSTIN, Texas (Reuters) - U.S. President Donald Trump said on Wednesday he has not made a trade deal with China yet because Beijing is not “stepping up” in negotiations.
“I don’t think they’re stepping up to the level that I want,” Trump told reporters after touring a plant in Austin that assembles Apple Inc (AAPL.O) computers.


Home
E-Com Covid
Big Change
Panic Buying
Infographics
Impact
Impact India
Impact Global
Safety & Study
Online Safety
Comparative Study
Whats New
New features
Sample Website
Future & Conclusion
Know More
News
Quiz
about us
E-COMMERCE DURING PANDEMIC
E-COMMERCE quiz


2 references to Path
Microsoft.PowerShell.Security (2)
security\AclCommands.cs (2)
1371
if (
Path
== null)
1451
foreach (string p in
Path
)


Click on the picture for biography
| Monday | Tuesday | Wednesday | Thursday | Friday |
|---|---|---|---|---|
| Science | Algebra 2 | PE | Mandarin | Web Design |
| Histort | Web Design | Mandarin | Science | English |
| Algebra 2 | PE | Bible | English | Bible |
| Bible | Science | History | Algebra 2 | PE |
| Mandarin | English | Web Design | Chapel | History |


See: Description
| Interface | Description |
|---|---|
| HostInfo |
Provides platform-independent host information.
|
| TimeZoneCache | |
| UidGenerator |
| Class | Description |
|---|---|
| Calendars |
$Id$
Created on 10/11/2006
Utility method for working with
Calendar s. |
| CompatibilityHints |
$Id$
Created on 9/03/2006
A set of keys used to enable compatibility features.
|
| Configurator |
$Id$
Created on 06/02/2008
Provides configuration properties specified either as system properties
or in an ical4j.properties configuration file.
|
| Constants |
$Id$
Created on 5/07/2005
Provides some convenience methods for working with constant
parameters and properties.
|
| Dates |
$Id$
Created on 26/06/2005
Implements a collection of utility methods relevant to date processing.
|
| DecoderFactory |
Abstract base class for decoder factory implementations.
|
| DefaultDecoderFactory |
Default decoder factory implementation.
|
| DefaultEncoderFactory |
Default encoder factory implementation.
|
| EncoderFactory |
Abstract base class for encoder factory implementations.
|
| FixedUidGenerator |
$Id$
Created on 11/03/2007
Generates
Uid properties in a similar fashion to that recommended in section <IP_ADDRESS> of the specification. |
| InetAddressHostInfo | |
| JCacheTimeZoneCache | |
| MapTimeZoneCache | |
| Numbers |
$Id$
Created on 6/08/2005
A utility class for number processing.
|
| RandomUidGenerator |
Extract from RFC7986:
|
| ResourceLoader | |
| SimpleHostInfo | |
| Strings |
$Id$ [23-Apr-2004]
Utility methods for working with parameters.
|
| TimeZones |
$Id$ [5/07/2004]
Utility methods relevant to Java timezones.
|
| Uris |
$Id$
Created on 11/09/2005
Utility methods for working with URIs.
|


The following regression output is obtained by backtesting the time period from Jun 2013 to Jun 2016. From the regression statistics, the R-squared value is 1.4% which is smaller than the paper value 3.89%. Our momentum coefficient, ρ, is 0.0633 compared to the paper's 0.042. We obtained 1.0350 mean reversion coefficient (1 + 0.0350), and the paper got 0.9859.
From these results we can say the limited sample size does not impair the feasibility of this model. The t-stats of the coefficients are -4.074 and 1.417 for the reversal factor and momentum factor respectively. The p-value of the reversal factor is very small which means this factor has a very high significance level.
We performed some rough period sensitivity analysis in different time period(from 2015 to 2018) and summarized the results as the following table:


@(
unused : valueobjects.base.Page[entity.loyalty.Coupon],
used : valueobjects.base.Page[entity.loyalty.Coupon],
tab : String
)
@import views.html.helper._
@import services.base.utils.Utils;
@services.base.HtmlUtils.misc().addHeadOnce{
}
@views.html.member.base.master("my-coupon") {
My Coupon
- Unused Coupons
- Used Coupons
| code |
name |
minimum amount |
value |
valid date |
@if(unused != null && unused.getList().size > 0){
@unused.getList().map{m=> @if(m != null){
| @m.getCode |
@m.getRuleName |
@Utils.money(m.getMinAmount) @if(m.getCo !=<EMAIL_ADDRESS>|
@m.getValue @if(m.isCash() && m.getCo !=<EMAIL_ADDRESS>|
@m.getValidStartDateStr ~ @m.getValidEndDateStr |
} } }
@if(unused != null && unused.getList().size()>0){
@views.html.product.gadget.pagination((unused.pageNo-1),unused.totalPages)
}
| code |
name |
order number |
@if(used != null && used.getList().size()>0){
@used.getList().map{m=> @if(m != null){
| @m.getCode |
@m.getRuleName |
@m.getOrderNumber |
} } }
@views.html.product.gadget.pagination((used.pageNo-1),used.totalPages)
@form(controllers.loyalty.routes.MyCoupon.list(),'id->"searchbar",'role->"form",'enctype->"multipart/form-data"){
}
Coupon Ruler:
- 1. Coupons are non-refundable and can not be redeemed for cash.
- 2. The discount in coupons can not be applied to the cost of shipping.
- 3. Coupons can only be used within their valid dates.
- 4. Coupons can't be applied together with each other for one order. One coupon can only be used at a time.
- 5. Coupons can't be applied to special products and all dodocool branded items. For example, if a customer gets a coupon (get a 10% off) and orders an item A with a special discount and an item B, the coupon will only be available to item B.
- 6. Coupons will be used after customers complete the payment successfully. If a customer requests to refund and the supplier agrees to refund, the coupon used will not be available again and the refund amount will not exceed the cash payment customer paid.
- 7. In case of order cancellation before finishing the payment, the coupon will be available for next order before the coupon expires.
- 8. To redeem coupons, choose the corresponding coupon you obtained in the coupon box when checkout.
- 9. Quantitive restrictions on coupons may vary from different activities. Besides, some coupons may have their specific rules of usage in different situations. For example, coupons can only be used on a specified category. Please see the instructions of the relevant promotions for more details.
@services.base.HtmlUtils.misc().addTailOnce{
}
}


Quick Install
Download the bootstrap.css or bootstrap.min.css files or install using Bower:
bower install wisvch-bootstrap-theme
README

Bootstrap for WISVCH

Powered by Themestrap. Themestrap is a simple starter kit for constructing Twitter Bootstrap 3+ themes. It provides the skeleton
for a simple, maintainable theme that always uses code directly from Bootstrap with as little replacement as
possible.

Usage

See https://wisvch.github.io/bootstrap-theme/

Development

Setup

Install dependencies using
Grunt and Bower (you must have these
installed).

npm install
bower install

Now you're ready to go! Simply edit less/variables.less and less/theme.less to your liking.
When you're ready, just run grunt and it will compile and minify the distribution for you.
You can also run grunt watch to automatically compile as you work.

Testing Out

We've provided a "Bootstrap Kitchen Sink" HTML file at examples/kitchen-sink.html that contains
all of the various components in all of their variations. It may not be 100% exhaustive but it
should give you a good idea of what your theme will look like at a glance.

You can start a development server at http://localhost:8000 by running grunt serve. Your theme will automatically compile while the server is running.

Copyright and license

Copyright 2015 W.I.S.V. 'Christiaan Huygens'; copyright 2013 Divshot, Inc. under the Apache 2.0 license.


Hello, Blockstack!
Sign In with Blockstack
Hello,
Anonymous
!
Logout
Drop image file
Modal title
×
Loading...
Error loading
Card title


If you leave the app for any reason, you’ll lose ALL of your Deep Work! Press STOP when you can’t focus anymore.


J.C.Bose University Ymca Faridabad
(A Haryana State Government University)
(Established by Harayana State Legislative Act No. 21 of 2009 & Recognised by UGC act 1956)
Accredited "A" Grade by NAAC
| S.No | Club Name | Faculty Coordinater | Secetary | Contact No. |
|---|---|---|---|---|
| 1 | ANANYA | Mr. Rajiv Sindwani | Arpit Gupta Aishwarya Rani |
8585929123 |
| 2 | NATARAJA | Ms. Neha Goyal | Jayesh Sher Swati Yadav Shivani Rane |
8860566882 |
| 3 | SRIJAN | Dr. Renuka Gupta | Agam Singh Puneet Poonam Brar |
8860566882 |
| 4 | JHALAK | Ms. Preet Kaur | Ritika Saini Raja Singla Akshat Mehta |
9818644573 |
| 5 | VIVIDHA | Dr. Shailender Gupta | Divij Gupta Himanshu Aggarwal Abhilaksh |
9873776165 |
| 6 | TARANNUM | Ms. Shruti Sharma | Tanveer Singh Eishita Sharma Eesh Joshi |
9999914981 |
| 7 | VIVEKANAND MANCH | Dr. Pradeep | Amandeep |<PHONE_NUMBER> |
| 8 | MANAN | Mr. Harish Kumar | Tarun Garg |<PHONE_NUMBER> |
| 9 | MECHNEXT | Mr. Sanjay Kumar | Shubham Gupta Shubham Aggarwal Vipin Bajaj |
9953399408 |
| 10 | MICROBIRD | Mr. Lalit Mohan Rai | Bhuvnesh Kumar Gaurav Yadav Sakshi Sharma |
8447549391 |
| 11 | SAMARPAN | Mr. Lalit Rai | Nikhil jain Abhishek Aggarwal Reena |
9971805448 |


"Well, keep in mind, you can check out up to 60 items. Here is your return dates slip. Have a good one." The librarian says as they hand you the slip.
Thanks, you say.


How to save images in Google Photos to your iPhone and access them in the Photos app
by Melanie Weir, Business Insider US- You can save images from Google Photos to your iPhone so they appear in your Photos app.
- You’ll first have to save the images to your Google Photos library, and then you can download them to your iPhone’s Photos app.
- Here’s how to save images from Google Photos to your iPhone.
- Visit Business Insider’s homepage for more stories.
Google Photos is a great app to store, share, and sync photos across devices.
It has fun features, like suggested animations, collage and movie makers, and even joint libraries, where you and another person can both add photos from your devices to the same album.
Sometimes, you may want to save Google Photos directly to your iPhone’s Camera Roll. If you did not originally take the photo, or it isn’t in your phone for some other reason, you’ll have to download it onto your Camera Roll first.
Note that if you have syncing turned on, Google Photos knows which photos are already on your Camera Roll, and a save button will not appear next to those.
Here’s how to save pictures from Google Photos to your iPhone.
Check out the products mentioned in this article:
iPhone 11 (From $699.99 at Best Buy)
How to save images in Google Photos to your iPhone
1. Open the Google Photos app.
2. Find the photos you want to save by navigating the tabs at the bottom of the screen. Since these are likely photos you did not take yourself, they might be in the “Sharing” tab at the bottom right of the screen, or the “Albums” tab second from the left.
3. If you only want to save one photo, tap it, then hit the button that says “Save” at the top of the screen. This will save these photos to your Google Photos library.
4. If you want to save multiple photos, long tap them to select them – a blue check mark will appear in their top left corner. Once you have selected all the photos you need, tap the button that looks like a cloud with an arrow in it in the top left corner of the screen.
5. Go back to your Photos tab, the button in the bottom left corner of the screen.
6. Scroll until you find the photos you just downloaded; they are organized by date taken.
If you want to save a single image to your iPhone’s Photos app
Now that you have downloaded the images to your Google Photos library, you can save them to your iPhone’s Photos app. Here’s how:
1. Tap the photo to bring it up in full screen, then tap the three dots in the top right corner.
2. In the pop-up menu, tap the button labeled “Save to device,” third from the left. It looks like an arrow pointing to a bracket.
If you want to save multiple images to your iPhone’s Photos app
1. Long tap each photo until the blue selection check appears in their top left corner. Then press the button at the top of your screen that looks like a box with an arrow coming out of it.
2. A pop-up menu will appear. Tap “Save to device,” then wait while your photos download.
Related coverage from How To Do Everything: Tech:
-
How to back up the photos on your Galaxy S10 automatically by using Google Photos, or manually through Samsung’s Smart Switch app
-
How to download music from Google Play Music on your iPhone, Android, or computer
-
‘How does Google Photos work?’: Everything you need to know about Google’s photo storage app for iPhone and Android
-
How to easily delete all the photos on your iPhone at once


No service providers were found matching all of your needs.
Try selecting fewer services. Few providers provide all of the services listed.
Try selecting a different day. Many providers are only open Monday through Friday.
Not getting many results? Try searching for fewer services at once. The form tries to find places that offer ALL the services you selected. Searching for fewer services often shows more results.


RNA MTase OpenUrl N-guanine virus; Nidovirales virus coronavirus CrossRef structural cap genome sequence MTases nsp structure Abstract FREE Text viral nsp-like Tobaniviridae genomes using RF-MTase signature RNA-cap bat used ’-O Orfa conserved domain protein Science Web nidovirus Fig. enzymes fold motifs Res alignment capping gene members methylation tree Decroly Human K-D-K-E arterivirus associated enzyme evolution new novel Acids Canard Coronavirus ExoN HKU; Nucleic activity al: carry genomic nidovirus; sequences structures viruses (see Biol SAM Structural Virol based canonical family identified mRNA methyltransferases number presence respiratory site syndrome (MG); Acad Gorbalenya Natl Orfb Proc Sci ]). accession alignments analysis binding catalytic functional generated order position signature-sequences single (Fig. Arteriviridae, C-terminus FasTtree Mol N-terminus Palaemon Porcine RdRp S). Virus Western Xinzhou amino coronaviruses crystal data detection determined eukaryotic example features immediately involved kb), map methyltransferase motif nonstructural perform phylogenetic possess putative signature-sequence support tetrad typical values (reviewed Conversely, Coronaviridae Encephalitozoon Fathead Figure Flower Hainan MTase, MTase. NRF-MTase Nanhai Nat Nidovirales, Roniviridae Roniviridae, Rossman Snijder Table Thrips Ziebuhr acid analysis. code complex. coronavirus; described detectable detected discovery end fever followed guanine hepatitis homology known large locus, mechanism methyl methylation, model multiple obvious performed predicted present proposed red respectively ribose shark size specificity supposedly thought torovirus; trees type, unique usually virus.


{% extends "layout.html" %} {% block content %} {% include "includes/v2/nav.html" %} {% include "includes/error-summary.html" %} {% include "includes/message-banner.html" %} Warning Are you sure you want to clear this handover Yes, clear handover Cancel Warning Are you sure you want to Reallocate this handover from JSA to IS Yes, reallocate handover Cancel Christine Dixon ZZ123456A Customer details {% if data['scenario'] === 'allocatorEdit' %} Agent: Callum Dalton {% endif %} {% if data['scenario'] === 'agentEditEscalate' %} Time remaining Expired {% else %} Time remaining 1 hour 59 mins {% endif%} {% if data['callbackRequired'] === 'Yes' %} Callback required Yes Telephone 01234 567891 {% else %} Callback required No {% endif %} {% if data['callbackRequired']==='Yes' and data['callBackStatus'] !== 'First call failed - engaged' %} Status First call pending {% elif data['callbackRequired']==='Yes' and data['callBackStatus']==='First call failed - engaged' %} Status Second call pending {% else %} Status In progress {% endif %} Update handover Reallocate {% if data['scenario'] === 'agentEditEscalate' %} Escalate handover Escalate handover {% endif %} Description {% if data['scenario'] === 'agentClear' %} Change of address {% else %} Payment due last week, customer checked account and payment is still outstanding {% endif %} Add a note {{ data['handover-note'] }} Did this update result from customer contact ? No Yes {% if data['callbackRequired'] === 'Yes' %} {% if data.callBackStatus === 'First call failed - engaged' %} Set status Call failed - engaged Call failed - number unobtainable Call failed - not answered or Call successful clomplete handover {% else %} Set status Call failed - engaged Call failed - number unobtainable Call failed - not answered or Call successful complete handover {% endif %} {% else %} Set status No callback required Callback required or Completed clear handover {% endif %} {% if data['scenario'] === 'agentClear' %} Save and update {% else %} {% endif %} Add a note {{ data['handover-note-realocate'] }} {% if data['scenario'] === 'allocatorEdit' %} {% include "includes/v2/reallocateAgent.html" %} {% endif %} {% include "includes/v2/selectBenefit.html" %} {% include "includes/v2/selectHandoverType.html" %} {% include "includes/v2/selectHandoverReason.html" %} Recieving office type Benefit office Claimants Jobcentre {% if data['scenario'] === 'agentReallocate' %} Reallocate handover {% else %} {% endif %} Back to queue History {% if data['callBackStatus'] %} Callback First callback Failed - engaged {% include "includes/v2/date.html" %} at 10:35 Calumn Dalton, Hyde Benefit Service Centre {% endif %} {% if data['handover-note'] %} Note {{ data['handover-note'] }} {% include "includes/v2/date.html" %} at 10:30 Calumn Dalton, Hyde Benefit Service Centre {% endif %} {% if data['handover-note-reallocate'] %} Note {{ data['handover-note-reallocate'] }} {% include "includes/v2/date.html" %} at 10:05 Calumn Dalton, Hyde Benefit Service Centre {% endif %} {% if data['scenario'] === 'agentClear' %} Allocated JSA / maintenance / Change of address {% include "includes/v2/date.html" %} at 9:33 Bobby Brown, Hyde Benefit Service Centre {% else %} Allocated JSA / New claim / Payment query {% include "includes/v2/date.html" %} at 9:33 Bobby Brown, Hyde Benefit Service Centre {% endif %} Handover created {% include "includes/v2/date.html" %} at 9:33 Bobby Brown, Hyde Benefit Service Centre {% endblock %}
Warning Are you sure you want to clear this handover
Warning Are you sure you want to Reallocate this handover from JSA to IS
Callum Dalton
Expired
1 hour 59 mins
Yes
01234 567891
No
First call pending
Second call pending
In progress
Change of address
Payment due last week, customer checked account and payment is still outstanding
or
First callback Failed - engaged
{% include "includes/v2/date.html" %} at 10:35
Calumn Dalton, Hyde Benefit Service Centre
{{ data['handover-note'] }}
{% include "includes/v2/date.html" %} at 10:30
{{ data['handover-note-reallocate'] }}
{% include "includes/v2/date.html" %} at 10:05
JSA / maintenance / Change of address
{% include "includes/v2/date.html" %} at 9:33
Bobby Brown, Hyde Benefit Service Centre
JSA / New claim / Payment query


Former NC State basketball player Grundy dies after stabbing
by The Associated PressLOUISVILLE, Ky. (AP) — Authorities in Kentucky say former North Carolina State basketball player Anthony Grundy has died from stab wounds suffered as the result of a domestic dispute.
Louisville police spokeswoman Alicia Smiley didn’t provide any additional details on Friday about the death of 40-year-old Anthony Grundy. Smiley says police responded to a residence on Thursday evening regarding a domestic altercation.
A coroner’s report says Grundy died at a hospital Thursday from “multiple sharp force injuries to the body.”
Smiley says an investigation into Grundy’s death is underway and no one has been charged.
Grundy played for the Wolfpack from 1998 to 2002.
His 12-year professional career included a brief stint with the Atlanta Hawks in the NBA and teams in Europe and Asia.
The Associated Press


Seven injured in Northland crash
Seven people have been injured, four seriously, in a single-vehicle crash in Northland.
The crash occurred on State Highway 1 near the Piano Hill intersection south of Hikurangi, 13km north of Whāngārei, about 1.20pm.
"Initial indications are that a number of people have sustained injuries, with four reported to be in a serious condition and three in a moderate condition," police said.
The Serious Crash Unit was attending, a police spokeswoman said.
The highway was closed for a time.


Take a look at the documentation
Suggested topics:
JavaScript DOM document Node this
Here is some useful reference:
document.getElementById(id)
Node.appendChild(otherNode)
Node.removeChild(otherNode)
Node.parentElement
The first version of the game required to use the browser's Developer Tools or FireBug in order to solve it. This still can be done, but come on... would you really do that after all the time I spent on the UI?
Oh, sorry. Login is bugmaster, password is 123star.
You can also resize the terminal if it's too small for you.
The Lab uses jQuery, jQuery UI, jQuery Terminal Plugin, Malihu Custum Scrollbar jQuery Plugin, MutationSummary and its jQuery plugin, -prefix-free and its jQuery plugin, CodeMirror and Buzz.
Built with Yeoman
Written by Alberto Congiu
Logo by Laura Congiu
Smoking Gun, Hidden Agenda and Danse Macabre - Low Strings Finale by Kevin MacLeod
Keyboard sounds by ballana
button-on by florian_reinke
button-9 by DJ Chronos
exit-sound and swosh by qubodup
sliding sounds by LG
bird-1-a by esperar
button-12 by adcbicycle
success-1 by fins
tom by Suicidity
cartoon-bing-low by kantouth
jaw-harp by 3bagbrew
cartoon-poppyup sounds by martian
glass-break by cmusounddesign
male by Dinsfire
MedICO icon set by BanzaiTokyo
Broken glass effect inspired by Lea Verou's CSS3 Patterns
Achievements:
Points:


{% extends 'dashboard_layout.html' %} {% block title %}Compare Exercise{% endblock %} {%block breadcrumb %}
You can use this form to compare the all time performance of two members.
| Member: | {{compare_member_1_data["name"]}} | {{compare_member_2_data["name"]}} | ||
|---|---|---|---|---|
| Time | Calories | Time | Calories | |
| Total: | {{compare_member_1_data["total_time"]}} Hour(s) | {{compare_member_1_data["total_cals"]}} Calorie(s) | {{compare_member_2_data["total_time"]}} Hour(s) | {{compare_member_2_data["total_cals"]}} Calorie(s) |
| Running: | {{compare_member_1_data["running_time"]}} Hour(s) | {{compare_member_1_data["running_cals"]}} Calorie(s) | {{compare_member_2_data["running_time"]}} Hour(s) | {{compare_member_2_data["running_cals"]}} Calorie(s) |
| Cycling: | {{compare_member_1_data["cycling_time"]}} Hour(s) | {{compare_member_1_data["cycling_cals"]}} Calorie(s) | {{compare_member_2_data["cycling_time"]}} Hour(s) | {{compare_member_2_data["cycling_cals"]}} Calorie(s) |
| Swimming: | {{compare_member_1_data["swimming_time"]}} Hour(s) | {{compare_member_1_data["swimming_cals"]}} Calorie(s) | {{compare_member_2_data["swimming_time"]}} Hour(s) | {{compare_member_2_data["swimming_cals"]}} Calorie(s) |


Copyright © 2021 Anatoly Rodionov
Authors: Anatoly Rodionov (anatoly.ya.rodionov@gmail.com).
Simple implementation of gen_server multi call without starting new proesses. Requires Erlang/OTP 24.
| multicall1/1 | Naive implementation; makes gen_server calls one after another. |
| multicall2/1 | Makes asynchronous gen_server calls. |
| multicall3/1 | Same as multicall2 but treats timeouts differently - it calculates time for each call starting from the last call. |
| multicall4/1 | Same as multicall4(CallRequests, ?DEFAULT_TIMEOUT). |
| multicall4/2 | Same as multicall2 but another timeout semantic; timeout is understood as time limit for all calls to be completed. |
multicall1(CallRequests::[{pid(), term()} | {pid(), term(), non_neg_integer() | infinity}]) -> [term()]
CallRequests: list of call requests
returns: list of calls responses in the same order as calls
Naive implementation; makes gen_server calls one after another. Execution time is proportional to sum of all call times.
This not solution. This function is for illustration and comparison.multicall2(CallRequests::[{pid(), term()} | {pid(), term(), non_neg_integer() | infinity}]) -> [{reply, term()} | timeout | {error, term()}]
CallRequests: list of call requests
returns: list of receive_response return values in the same order as calls
Makes asynchronous gen_server calls. First asynchronously sends all requests using gen_server:send_request. Then gen_server:receive_response receives results. In this case calls to different recipients are executed concurrently by their servers.
Execution time may be proportional to time of the longest call. Let N be the the CallRequests length and M - number of different servers; n(i) - number of calls to server(i), t(i,j) - execution time of call(i, j) to service(i). Here 0 < i <= N, 0 < j <= n(i). Let t(i) be the sum of all t(i,j). Expectation time of multicall2 call is evidently max(t(i)).
In the worst case scenario when N=1 multicall2 is no better than multicall1, but when N=M then execution time may be proportional to time of the longest call.
The other worst case scenario is when all recipients never answer. In this case full execution time is sum of all timeouts.multicall3(CallRequests::[{pid(), term()} | {pid(), term(), non_neg_integer() | infinity}]) -> [{reply, term()} | timeout | {error, term()}]
CallRequests: list of call requests
returns: list of receive_response return values in the same order as calls
Same as multicall2 but treats timeouts differently - it calculates time for each call starting from the last call.
Problem of multicall2 is that it changes timeout semantic. It interprets timeout as time of the time started from receive_response call, not from the time of send_request call. multicall3 fixes this by using time the last send_request as the starting time for each receive_response.
multicall3 not only fixes timeout semantic but also makes the second worst scenario (all recipient do not answer in time). multicall3 will wait only maximum of timeout times.
There is still reason for using multicall2 - it gives you maximum chances to to receive answers from recipients.multicall4(CallRequests::[{pid(), term()}]) -> [{reply, term()} | timeout | {error, term()}]
CallRequests: list of call requests
returns: list of receive_response return values
Same as multicall4(CallRequests, ?DEFAULT_TIMEOUT)
multicall4(CallRequests::[{pid(), term()}], Timeout::non_neg_integer() | infinity) -> [{reply, term()} | timeout | {error, term()}]
CallRequests: list of call requests
Timeout: is time limit for all calls to be completed
returns: list of receive_response return values in the same order as calls
Same as multicall2 but another timeout semantic; timeout is understood as time limit for all calls to be completed.
Generated by EDoc


SMT Whitepaper
Developers
Entrepeneurs
Token Creation
Voting Parameters
Token Emissions
Token Creation
Control Account
@
Precision
Max Supply
Tokens
Contribution Begin Time
Contribution End Time
Launch Time
Minimum Contributions
STEEM
Minimum Unit Ratio
Maximum Unit Ratio
ICO Tiers
Voting Parameters
Allow Voting
Allow Downvotes
Cashout Window
Seconds
Reverse Auction Window
Seconds
Vote Regeneration Period
Seconds
Votes per Regeneration Period
Votes
Content Constant
Percent Curation Rewards
%
Author Reward Curve
Quadratic
Bounded
Linear
Square root
Convergent linear
Convergent square root
Curation Reward Curve
Quadratic
Bounded
Linear
Square root
Convergent linear
Convergent square root
Token Emissions
ICO Tier
Steem Cap
STEEM
Steem Units
Token Units
Token Emission
Schedule Time
Left Endpoint Time
Right Endpoint Time
Interval Seconds
Seconds
Interval Count
Relative denominator
Bits
Left Endpoint Amount
Right Endpoint Amount
Left Endpoint Numerator
Right Endpoint Numerator
Floor Emissions
Emissions Unit
Control Account
@
Active WIF


| Modules | classes |
function plg_write | ^ |
plg_write saves Polygon points to a file.
- Source:
- Polygon.h:58
- Author:
- unascribed
- Version:
- unknown
- Params:
plgData File * to a file plgData open for writing. pol - a Polygon structure pointer.
- Code:
public void plg_write ( Polygon * pol , FILE * plgData )
Created Wed May 21 02:48:16 2014.
This documentation was generated automatically by
ccdoc v08r41 2004/09/29 bin_opt_msvc_MSWin32-x86-multi-thread-4.0.
Click here to submit a bug report or feature request for ccdoc.
Click here to return to the top of the page.


We strongly recommend you to NOT use this in a Production Environment since we're still on Beta Version. Follow us on Twitter @OktyApp to keep yourself up to date


much so that he skipped the 5th grade and went straight to middle school, namely Crittenden Middle School. It was in a poor area. Most kids did not work much there, they were rather fond of bullying other kids, such as the young Steve. One day he came home and declared that if he wasn’t transferred to another school, he would stop going to school altogether. He was 11. Paul and Clara complied, and the Jobses moved to the cozier city of Los Altos, so that Steve could go to Cupertino Junior High. This proved to be decisive for Steve’s future.
As Steve was growing up in Los Altos, he became increasingly curious about the world of electronics that filled his neighbors’ garages. His own father introduced him to Heathkits, which fascinated him.
When Steve arrived in Homestead High School, he enrolled in a popular electronics class. His teacher was


Register Yourself Here
Please enter your details
1. First name:
2. Last name:
3. Phone:
4. Username:
5. Email Id:
6. Password:


Morse code is a method for transmitting information, using standardized sequences of short and long marks or pulses - commonly known as "dots" and "dashes" - for the letters, numerals, punctuation and special characters of a message.
Originally created for Samuel Morse's electric telegraph in the mid-1830s, it was also extensively used for early radio communication beginning in the 1890s. However, with the development of more advanced communications technologies, the widespread use of Morse code is now largely obsolete.
When using morse code, the timing is as follows: A dash is equal to three dots. A space between parts of the same letter is equal to one dot. A space between two letters is equal to three dots and a space between two words is equal to five dots.


Donna's Green Bean Casserole
MADISON, Wis. - Green Bean casserole made with canned soup and fried onions is an old traditional favorite.
Try this recipe if you would like to make it homemade. The sauce is SO good.
The mushroom sauce can be made ahead. Freeze or refrigerate until ready to bake.
Baked Fried Onions - optional
- 1 medium onion, diced
- 1 egg, lightly beaten
- 3/4 cup Panko bread crumbs
- Salt to taste
Mushroom Sauce
- 1/2 tablespoon butter
- 4 ounces fresh mushroom, finely chopped
- 3 tablespoons butter
- 1/4 cup flour
- 1 cup fat-free chicken broth
- 1/2 cup skim milk, divided
- 2 tablespoons grated Parmesan cheese
- Dash white pepper
- 1 tablespoon dry sherry, optional
- Salt and pepper to taste
- Green Beans
- 3 cans (15 ounces each) cut green beans, drained
Baked Fried Onions optional- Preheat oven to 475 degrees. Line a baking sheet with parchment paper. Mix chopped onions with a beaten egg. Place Panko bread crumbs in a shallow bowl. Add onions and toss until well coated. Evenly spread onions on baking pan. Bake for 15 - 20 minutes or until golden brown and crisp. Toss them with a spatula every 5 minutes. Remove from oven and coarsely crumble them. Sprinkle with salt. Turn oven down to 350 degrees.
Mushroom Sauce
In a medium sized heavy saucepan, melt 1/2 tablespoon of butter. Add finely chopped mushrooms. (It works best to chop them in a small food processor.) Cook over medium heat stirring frequently until mushrooms are tender and most of the moisture has been absorbed. Place mushroom in a bowl and set aside. Add 3 tablespoon of butter to the pan. Melt the butter.
Add flour and stir constantly over medium heat until mixture is bubbly.
Add chicken broth and continue to stir constantly until mixture boils and thickens.
Add 1/4 cup milk, cheese, white pepper, sherry, and reserved mushrooms. Add salt and pepper to taste.
Beans
Place canned beans in a casserole dish. Add desired amount of sauce. This can be made ahead at this point. Add extra milk if sauce is too thick. Cover and refrigerated until ready to bake.
Bake at 350 degrees for 20 minutes or until heated through. Top with crumbled breaded onions or canned fried onions if desired. Place in oven and bake for an additional 5 to 10 minutes.
Serves 10. Per serving:
Calories: 150
Fat, gm.: 5
Protein, gm.: 5
Carbs, gm.: 23
Cholesterol, mg.: 30
Dietary Fiber, gm.: 3


Preparation time
less than 30 mins
Cooking time
30 mins to 1 hour
Serves
Serves 4-6
This hearty French dish uses James Martin's recipe for
homemade baked beans with sausages
as its base.
Preheat the oven to 200C/180C Fan/Gas 6.
For the baked beans and sausages, heat a tablespoon of the oil in an ovenproof frying pan over a medium heat. Add the sausages and fry for 2-3 minutes, or until browned on all sides. Transfer the pan to the oven and continue to cook for 10-12 minutes, or until cooked through. Remove from the pan and set aside.
Meanwhile, heat another tablespoon of the oil in a separate frying pan over a medium heat. Add the shallots and fry for 2-3 minutes, or until softened. Add the rosemary and garlic and fry for a further 1-2 minutes.
Add the chopped tomatoes and bring the mixture to the boil, then reduce the heat until the mixture is simmering. Add the stock and beans, return the mixture to a simmer and cook for 3-4 minutes, or until the sauce has thickened slightly.
Stir in the parsley and season, to taste, with salt and freshly ground black pepper. Keep warm.
For the cassoulet and mash, heat a heavy-based, ovenproof casserole dish over a medium heat. Add the pancetta lardons and fry until crisp and golden-brown. Then add the duck confit.
Add the cooked sausages and the bean mixture, then pour over the stock and bring the mixture to a simmer. Stir in the rosemary and parsley and season, to taste, with salt and freshly ground black pepper.
Meanwhile, heat a griddle pan over a medium heat. Drizzle a little of the remaining tablespoon of oil onto each side of the bread slices. Grill the bread for 1-2 minutes on each side, or until golden-brown chargrill marks appear on both sides.
In a food processor, blend the toasted sourdough to breadcrumbs. Sprinkle the breadcrumbs on top of the cassoulet and bake for 5-10 minutes, or until the sauce has thickened slightly.
Meanwhile, boil the potatoes in a pan of salted water for 12-15 minutes, or until tender. Drain well and return to the pan, then return the pan to the heat for 1-2 minutes so that any excess moisture evaporates.
Mash the potatoes until smooth (preferably using a potato ricer), then beat in the butter and double cream until smooth. Season, to taste, with salt and freshly ground black pepper.
To serve, divide the mash among serving plates and spoon over the cassoulet.


Men are forgotten but their words and deeds lives on, register and vote your favourite quotes on the Aeternity blockchain.
it is better to be feared than loved,if you cannot be both.
There is only one happiness in life to love and be loved.
Being entirely honest with oneself is a good exercise.


Loadable Modules - add your own custom features to Mesibo
Estimated reading time: 44 minutesImagine, if you could have the ability to process every message between your users, or could add custom features and functionalities. For example, create chatbots, filter profanity, translate messages between sender and recipient, analyze messages with machine learning and AI tools, and more. This can open up a plethora of creative possibilities for your apps. Now with mesibo modules, all of this is possible!.
Mesibo is designed “by Developers for Developers!”. As developers, we understand that a platform is very limited unless it allows its users to build more features and functionalities on it. This is how Mesibo loadable modules come in.
Mesibo loadable modules let you expand mesibo by adding your own features and functionalities. You can build powerful chatbots, filters, remotely communicate with hardware for IoT and robotics, integrate with Machine learning and Scientific computing backend such as Tensorflow, Dialogflow, Matlab, etc. and much more, keeping your data secure and private in your own premises or private cloud.
This makes mesibo the most compelling real-time communication platform existing today. In this document, we will describe how you can build and use mesibo modules to unlock new possibilities and innovative solutions.
Prerequisites
- Running Mesibo On-Premise
- Knowledge of Building and deploying C/C++ shared libraries
What is a Mesibo Module?
Mesibo module is essentially a message processor that allows you to intercept each message and decide whether to pass the message to the destination as it is, drop it or process it before sending it to the destination.
For example,
- a profanity filter module can drop messages containing profanity
- a translator module can translate each message before sending it to the destination
- a chatbot module can analyze messages using various AI and machine learning tools like Tensorflow, Dialogflow, etc. and send an automatic reply
The functionality of each module is programmed by you, and its capability is limited only by your imagination. Mesibo modules make Mesibo a powerful communication platform.
You can build a mesibo module on top of the core platform, as a shared library (a .so
file) and load it to extend the functionality of the mesibo platform.
How do Mesibo Modules work?
A Mesibo module is a shared library (.so
file) that can be loaded at runtime by the Mesibo on-premise server. Mesibo then invokes various callback functions that you have defined in the shared library whenever it receives messages from your users. Your module can then decide what to do with those messages, for example:
- Pass the message as it is
- Drop it
- Process it further before sending it to the destination
- Reply to the sender
You can load multiple modules, each having their own features and functionalities. It is also possible to load the same module multiple times with different configurations. You can specify all the modules and the loading order in the Mesibo configuration file, /etc/mesibo/mesibo.conf
. Mesibo will pass the data to each module in the order in which modules were loaded.
Creating a mesibo module is extremely easy. For example, you can implement a simple profanity filter module as follows.
Building a profanity filter
- Implement a callback function to process all the incoming messages and pass it to mesibo - we will call it
on_message
function - When any user sends a message, Mesibo will invoke
on_message
callback function of your module with the message data, and its associated message parameters such as sender, expiry, flags, etc. - Your module can analyze the message to find any profanity or objectionable content and return whether the message is safe or not.
- If no profanity is found, you can
PASS
the message and safely send it to the recipient; else you canCONSUME
the unsafe message and prevent the message from reaching the receiver.
Now that you understand the basic functionality of a Mesibo module, let’s dive deeper into the technical details of what forms a mesibo module.
Anatomy of a Mesibo Module
A Mesibo module has three components:
- An initialization function which will be called once by Mesibo after loading the module
- A set of callback functions that will be defined by the module. These functions are called by Mesibo as and when required
- A module definition structure which declares above-mentioned functions and other configuration information
Module Definition
A mesibo module is described by mesibo_module_t
structure as defined below. This is one of the most important data structures used in the Mesibo module.
typedef struct mesibo_module_s {
mesibo_uint_t version; /* mesibo module API version */
mesibo_uint_t flags; /* module flags */
const char *name; /* module name */
const char *description; /* module description */
void *ctx; /* module context */
module_config_t *config; /* module configuration */
mesibo_int_t (*on_cleanup)(mesibo_module_t *mod);
mesibo_int_t (*on_message)(mesibo_module_t *mod, mesibo_message_params_t *params, const char *message, mesibo_uint_t len);
mesibo_int_t (*on_message_status)(mesibo_module_t *mod, mesibo_message_params_t *params, mesibo_uint_t status);
mesibo_int_t (*on_call)(mesibo_module_t *mod);
mesibo_int_t (*on_call_status)(mesibo_module_t *mod);
mesibo_int_t (*on_login)(mesibo_module_t *mod, mesibo_user_t *user);
mesibo_uint_t signature; /* module signature */
uintptr_t reserved_0;
uintptr_t reserved_1;
uintptr_t reserved_2;
uintptr_t reserved_3;
uintptr_t reserved_4;
uintptr_t reserved_5;
uintptr_t reserved_6;
uintptr_t reserved_7;
//this function will be initialized by Mesibo
mesibo_int_t (*invoke)(mesibo_int_t id, mesibo_module_t *mod, ...);
} mesibo_module_t;
In the next section, we will learn how to initialize the module definition structure. Before that, it is essential to know how Mesibo knows about your module and loads it into the memory.
Loading a module
To load a module, you need to tell mesibo where to find your module, the directory path where your module shared library (.so
file) is located, and the name of the module. You need to specify these details in the configuration file /etc/mesibo/mesibo.conf
. You can also pass any other configuration that your module requires in the configuration files.
By default, mesibo looks for the file mesibo_mod_<module name>.so
in /usr/lib64/mesibo/
directory. For example, if your module name is chatbot
, mesibo will try to load the file /usr/lib64/mesibo/mesibo_mod_chatbot.so
Since mesibo on-premise runs in a docker container, you can keep modules in any directory and map the directory path by using the -v
option when you run the Mesibo container. You also need to mount the directory /etc/mesibo/
which contains your mesibo configuration file mesibo.conf
where you need to specify the name of the module and configuration. For example,
$ sudo docker run -v /certs:/certs -v /usr/lib64/mesibo/:/usr/lib64/mesibo/ \
-v /etc/mesibo:/etc/mesibo -net host -d mesibo/mesibo <app token>
Mesibo Configuration file
To load a module, you need to specify the module name in the configuration file mesibo.conf. For example,
module <module name>
Each module can have its own configuration. You can specify the module configuration consisting of name
and the corresponding value
, as shown below.
module <module name> {
<config name> = <config value>
<config name> = <config value>
.
.
.
}
For example, for a module named skeleton
, you can provide the configuration details as follows.
module skeleton {
file_name = xyz
auth_key = abc
}
To load multiple modules and their respective configuration :
module <module_1 name> {
/**Configuration for module-1 **/
}
module <module_2 name> {
/**Configuration for module-2 **/
}
.
.
.
module <module_N name> {
/**Configuration for module-N **/
}
The configuration items that you specify in the module configuration file will be available during module initialization as key-value pairs.
Refer to the code example in the next section to see how configuration details are passed during the initialization.
Module initialization
Mesibo initializes each module by calling a module initialization function. The naming convention for this function is mesibo_module_<module name>_init
. For example, if your module name is chatbot
, the name of your initialization function MUST be mesibo_module_chatbot_init
.
Your module MUST define this function. If not, mesibo will not be able to load the module, and the error message will be shown during the mesibo initialization. The prototype for which can be found in the file module.h.
int mesibo_module_<module name>_init(mesibo_int_t version, mesibo_module_t *mod, mesibo_int_t len);
The initialization function takes the following parameters:
version
of typemesibo_int_t
, Version of mesibo module. You must check that theversion
matchesMESIBO_MODULE_VERSION
to ensure that the on-premise mesibo server is using the same module version as the module.mod
of typemesibo_module_t*
, pointer to mesibo module configuration structure. Mesibo allocates this structure and passes it to module. The module must initialize this structure with the callback function pointer and the module description.len
of typemesibo_uint_t
, size of module definition structure. You must check that thelen
matchessizeof(mesibo_module_t)
to ensure that the on-premise mesibo server is using the same module definition structure as the module.
Mesibo provides a macro
MESIBO_MODULE_SANITY_CHECK
which does all the above checks and more. You should use it as the first line in your initialization code.
The configuration items that you specified in the Module Configuration file is available as a list of items in the structure module_config_t
where each item is a name-value pair of the type module_config_item_t
For example, for a module named skeleton
, you may define configuration as below
module skeleton {
file_name = xyz
auth_key = abc
}
the initialization function looks like as follows:
int mesibo_module_skeleton_init(mesibo_int_t version, mesibo_module_t *m, mesibo_uint_t len) {
MESIBO_MODULE_SANITY_CHECK(m, version. len);
if(m->config) {
mesibo_log(m, 1, "Following configuration item(s) were passed to the module\n");
for(int i=0; i < m->config->count; i++) {
mesibo_log(m, 0, "module config item: name: %s value: %s\n",
m->config->items[i].name,
m->config->items[i].value);
}
}
m->flags = 0;
m->description = strdup("Sample Module");
// initialize callback functions
m->on_cleanup = skeleton_on_cleanup;
m->on_message = skeleton_on_message;
m->on_message_status = skeleton_on_message_status;
m->on_login = skeleton_on_login;
mesibo_log(m, 1, "================> %s init called\n", m->name);
return MESIBO_RESULT_OK;
}
Above code will print the configuration details for the example module skeleton
in logs:
Following configuration item(s) were passed to the module
module config item: name: file_name value: abc
module config item: name: auth_key value: xyz
Module Callback Functions
There is a set of callback functions that need to be defined by the module. These callback functions are called by Mesibo based on different events. For example,
- When users send a message
- When there is a status update for the messages sent by the module
- When users make a call
- When users logs-in or logs-out
- When the module is unloaded, to reclaim memory/ perform the cleanup
The module needs to initialize the module definition structure with callback function pointers during the initialization, as shown in the above example. In above initialization example, skeleton_cleanup
, skeleton_on_message
, skeleton_on_message_status
, skeleton_on_login
are callback functions.
It is not mandatory to define all the callbacks. A module can define only those callbacks that the module is interested in. The function prototypes for all the callback functions are found in the file module.h.
You MUST not block any callback functions. If your processing requires time, you MUST process them in a separate thread.
Let’s look in detail at the different callback functions and their prototypes:
on_message
This function is called whenever a user sends a message. The module can process messages or can ignore as appropriate. The module can then indicate Mesibo whether to pass the message to the next module/recipient OR drop it by returning an appropriate value.
mesibo_int_t (*on_message)(mesibo_module_t *mod,
mesibo_message_params_t *params,
const char *message, mesibo_uint_t len);
Parameters:
mod
, pointer to mesibo module structureparams
, pointer to message parameters structure. It contains message parameters such asid
,from
- sender of the message,to
- message recipient, etc. For more details, refer Module Data Structures.message
, buffer containing the message data byteslen
, length of the message in bytes
Returns:
MESIBO_RESULT_PASS
to pass the message data and parameters as it is to the next module or the recipientMESIBO_RESULT_CONSUMED
message is consumed by the module and will not be passed to the next module or the recipient
Your processing MUST not block this function since it will block other messages. If your processing requires time or you are invoking REST APIs, you should copy data and process it in a separate thread.
on_message_status
This function is called whenever there is a status update for the messages sent from the module
mesibo_int_t (*on_message_status)(mesibo_module_t *mod,
mesibo_message_params_t *params,
mesibo_uint_t status);
Parameters:
mod
, pointer to mesibo module structureparams
, pointer to message parameters structure. It contains message parameters such asid
,from
- sender of the message,to
- message recipient, etc. For more details, refer Module Data Structures.status
containing the status of the sent message which corresponds to different status codes such asMSGSTATUS_SENT
,MSGSTATUS_DELIVERED
,MSGSTATUS_READ
, etc
Returns:
MESIBO_RESULT_OK
on_call
mesibo_int_t (*on_call)(mesibo_module_t *mod)
on_call_status
mesibo_int_t (*on_call_status)(mesibo_module_t *mod)
on_login
This function is called whenever a user logs-in or logs-out.
mesibo_int_t (*on_login)(mesibo_module_t *mod, mesibo_user_t *user);
Parameters:
mod
, pointer to mesibo module structureuser
, pointer to mesibo user structure. Refer Module Data Structures. Contains user parmeters flag, user address and online status.
Returns:
MESIBO_RESULT_OK
on_cleanup
This function is called when the module process is complete and to clean up.
mesibo_int_t (*on_cleanup)(mesibo_module_t *mod)
Module Helper Functions
Mesibo provides various helper functions for tasks like send a message, send an HTTP request, print logs, etc.
mesibo_message
This function can be used to send messages from the module to users and groups.
mesibo_int_t mesibo_message(mesibo_module_t *mod, mesibo_message_params_t *params,
const char *message, mesibo_uint_t len);
Parameters:
mod
, pointer to mesibo module structureparams
, pointer to message parameters structure. It contains message parameters such asid
,from
- sender of the message,to
- message recipient, etc. For more details, refer Module Data Structures.message
, buffer containing the message data byteslen
, length of the message in bytes
Returns: Integer : 0 on success , -1 on failure
For example,
mesibo_message_params_t p;
memset(&p, 0, sizeof(p));
p.to = 'user_source';
p.from = 'user_destination';
p.id = rand();
const char* message = "Hello from Module";
mesibo_uint_t len = strlen(message);
mesibo_message(mod, &p, message, len);
mesibo_http
This function can be used to make an HTTP request. It is especially useful to invoke services like DialogFlow, etc.
mesibo_int_t mesibo_http(mesibo_module_t *mod, const char *url, const char *post,
mesibo_module_http_data_callback_t cb, void *cbdata,
module_http_option_t *opt);
Parameters:
mod
, pointer to mesibo module structureurl
, both http and https URL are supported. You can also pass authentication information in URL. For example<EMAIL_ADDRESS>, is a string that contains raw POST data. For example, “authtoken=xyz&user=abc”cb
, is the call back function pointer whose prototype should matchmesibo_module_http_data_callback_t
. You will get the response of your http request, asynchronously through this callback function. Refer the example HTTP Callback Function provided.cbdata
is a pointer to data of arbitrary user-defined type. This callback data is passed on to the callback function that you have passed in the previous argument. You can store data of any arbitrary type such as a C/C++ struct and pass it as callback data to your call back function. For more details, refer to the sample codeopt
is the structure that containsoptions
or additional parameters that you can pass in your HTTP request such as extra_header, content_type, etc. For more details about themodule_http_option_t
structure, refer Module Data Structures.
Returns: Integer : 0 on success , -1 on failure
For example,
const char* url = "https://example.com/api.php"; //API endpoint
const char* post = "op=userdel&token=123434343xxxxxxxxx&uid=456"; // POST Request Data
mesibo_http(mod, url, post, mesibo_http_callback, NULL, NULL);
HTTP Callback Function
The callback function reference, cb
that you pass as a parameter should be defined as per the function prototype mesibo_module_http_data_callback_t
in module.h
.
typedef int (*mesibo_module_http_data_callback_t)(void *cbdata,
mesibo_int_t state,
mesibo_int_t progress,
const char *buffer,
mesibo_int_t size);
The callback function takes the following parameters:
cbdata
, Pointer to arbitrary data, which the response callback function may need. You pass this while calling the request function httpstate
, An integer indicating the state of the response data being passed
typedef enum {
MODULE_HTTP_STATE_REQUEST,
MODULE_HTTP_STATE_REQBODY,
MODULE_HTTP_STATE_RESPHEADER,
MODULE_HTTP_STATE_RESPBODY,
MODULE_HTTP_STATE_DONE
} module_http_state_t;
progress
, progress from 0 to 100. Progress is negative (< 0) for errorbuffer
, response datasize
, size of data in the buffer, in bytes
For example,
static int mesibo_http_callback(void *cbdata, mesibo_int_t state,
mesibo_int_t progress, const char *buffer,
mesibo_int_t size) {
tMessageContext *b = (tMessageContext *)cbdata;
mesibo_module_t *mod = b->mod;
if (progress < 0) {
mesibo_log(mod, 0, " Error in http callback \n");
// cleanup
return -1;
}
if (state != MODULE_HTTP_STATE_RESPBODY) {
return 0;
}
memcpy(b->buffer + b->datalen, buffer, size);
b->datalen += size;
if (progress == 100) {
// process it ...
}
return 0;
}
mesibo_log
This function can be used to print to mesibo container logs.
mesibo_int_t mesibo_log(mesibo_module_t *mod, mesibo_uint_t level, const char *format,
...);
Parameters:
mod
, Pointer to mesibo module structurelevel
, log level. The logs with level 0 will always be printed. If level > 0, logs will be printed only if the level is enabled in the configuration fileformat
, string for printing data which is similar to that ofprintf
followed by the data to print.
Returns: Integer : 0 on success , -1 on failure
For example,
mesibo_log(mod, 0, "%s\n", "Hello, from Mesibo Module!");
mesibo_util_getconfig
This function can be used to get the value of a configuration item from the name-value configuration list passed in /etc/mesibo/mesibo.conf
char* mesibo_util_getconfig(mesibo_module_t* mod, const char* item_name);
Parameters:
mod
, Pointer to mesibo module structureitem_name
, Name of the configuration item
Returns: String: Configuration item value
For example, If the configuration is provided as
module skeleton {
file = abc
auth_token = xyz
}
Then,
char* item_val = mesibo_util_getconfig(mod, "file");
item_val
will contain the string abc
.
mesibo_util_json_extract
This function can be used to get the value of a key in a JSON string.
char* mesibo_util_json_extract(char *src, const char *key, char **next);
Parameters:
src
, JSON string sourcekey
, Key stringnext
, Pointer to the next byte after the searched item
Returns: String: Value Matching the Key in the JSON string.
For example,
char* test_json = strdup("{ \"name\":\"apple\", \"game\" : \"ball\" }");
char* value = mesibo_util_json_extract(test_json, "name" , NULL);
value
will contain the string apple
Module Data Structures
Message Parameters Structure
The C/C++ structure mesibo_message_params_t
is used to define the various parameters of an incoming or an outgoing message. Message params is used as argument to functions such as on_message
, on_message_status
, send_message
, etc.
typedef struct mesibo_message_params_s {
mesibo_uint_t aid;
mesibo_uint_t id;
mesibo_uint_t refid;
mesibo_uint_t groupid;
mesibo_uint_t flags;
mesibo_uint_t type;
mesibo_uint_t expiry;
mesibo_uint_t to_online;
char *to, *from;
} mesibo_message_params_t;
aid
- Application ID.id
- ID of the incoming message. For outgoing messages, id should be specified insend_message
function.refid
- Reference id (id of another message) to which the current message can be linked against.groupid
- Group ID should be specified when sending a message to a group, 0 for one-to-one messages.flags
- Message Flagstype
- Message Type, any arbitrary user-defined typesexpiry
- Message Expiry for an outgoing message (time to live), in secondsto_online
- Send the message only if the recipient is online
Mesibo User
typedef struct mesibo_user_s {
mesibo_uint_t flags;
char *address;
mesibo_int_t online;
}mesibo_user_t;
flags
- User flagsaddress
- User Address. Can be any sequence of characters that identifies a useronline
- Online Status of user
HTTP Options Structure
To passoptions
parameter of a HTTP request in the function mesibo_http() you use the C/C++ structure module_http_option_t
typedef struct _module_http_option_t {
const char *proxy;
// body or post data
const char *content_type; // body content type
const char *extra_header;
const char *user_agent;
const char *referrer;
const char *origin;
const char *cookie;
const char *encoding; // could be gzip, deflate, identity, br (do not use
// 'compress' which is obsolete)
const char *cache_control; // cache control and expiry
const char *accept;
const char *etag;
mesibo_uint_t ims; // if modified since, gmt time
mesibo_uint_t maxredirects;
mesibo_uint_t conn_timeout, header_timeout, body_timeout, total_timeout;
mesibo_uint_t retries;
} module_http_option_t;
Options Fields
proxy
Proxy URL, if any.content_type
Content-Type header. For example “application/json”.extra_header
Any custom headers you like to send, such as contain Authorisation header, etcuser_agent
User Agent, default mesibo/x.xreferrer
HTTP referer headerorigin
HTTP origin headercookie
Send HTTP Cookie Headerencoding
HTTP content encoding headercache_control
HTTP content encoding headeraccept
etag
ims
Set If-Modified-SInce header, timestampmaxredirects
conn_timeout
,header_timeout
,body_timeout
,total_timeout
are Settable Timeouts for every state of the protocol (connection, headers, body)retries
Retry broken downloads and uploads
Module Configuration Structure
The configuration attributes for a module can be provided as a configuration list which shall be made available in the mesibo module initialization function, through the following structures
typedef struct module_config_item_s {
char *name;
char *value;
} module_config_item_t;
typedef struct module_configs_s {
int count;
module_config_item_t items[0];
} module_config_t;
module_config_t
contains count
- the number of items in the configuration list & a list of items of type module_config_item_t
- a structure containing a name-value pair.
Memory Management
Since Mesibo is capable of handling millions of messages and users, your module callback functions can be invoked millions of times. Hence, you should avoid allocating memory dynamically. Instead, you should try to allocate required memory and complex operations during initialization.
Module Definition Structures
Module definition structure is allocated by Mesibo, and you MUST not free it.
Config Items Structures
Configuration items structure is allocated by Mesibo and can be freed if required. However, configuration key-value pairs are statically allocated. You can freely use those pointers but should never free them.
Writing and Compiling Mesibo Modules
We have published source code of various useful modules like a chatbot, translation, filter, etc. on GitHub. It is recommended that you start by downloading the repository.
The repository also contains the source code of a skeleton module and other necessary files like a module header file and a Makefile to compile a base module quickly. You can then modify it to suit your needs.
Downloading the Sample Modules Repository
Clone the Repository (Recommended)
If you have git installed, this is a recommended approach as you can quickly sync and stay up to date with the latest version. This is also a preferred way of downloading the code if you decide to contribute to the project.
To download, open a terminal and issue following commands:
$ mkdir mesibo-modules
$ cd mesibo-modules
$ git clone https://github.com/mesibo/onpremise-loadable-modules.git
Download the code as a zip file
You can also download the complete modules repository as a zip file. Although simple, the downside of this approach is that you will have to download the full source code every time it is updated on the repository.
Click on the Download
button to start downloading.
Once the download completes,
- Compile all the sample modules to ensure that modules compile successfully on your machine.
- Make a copy of
skeleton
module - Modify
skeleton
module by changing the module name, callback functions, etc. For a detailed example, refer to the Building a chat-bot below - Edit
MakeFile
and modify theMODULE
field to reflect module name in the output file correctly
#Sample MakeFile to build mesibo module
MODULE=skeleton
include ../make.inc/make.inc
Code references and Examples
Building a chat-bot
Now since we have learned about how the module works, we will build a simple but capable chatbot, which can integrate powerful analytical abilities in speech, image recognition, Natural Language processing, etc. in your backend using loadable modules. You can interface with any tool or library of your choice, such as Dialogflow, IBM Watson, Tensorflow, etc.
Let’s look at how you can build a chatbot using mesibo modules:
- Create a dedicated user (destination) for the chatbot, so that when a user sends a message to this destination, chatbot functionality can be invoked.
- When a user sends a message, your module will get the message text via the callback function
on_message
along with message parameters. - Check
'to'
field (destination) in message parameters to check if it was sent to the chatbot. If it’s not the chatbot destination, return PASS as explained inon_message
callback function description so that the message can be sent to the requested destination. - Send the message to your message processing model which could be a local function or a remote service like Dialogflow, IBM Watson, Tensorflow, etc. Your messaging processing model will process the message and send the appropriate response.
- You can send the response back to the user (sender) using
mesibo_message
function.
Refer to the Sample Chatbot Module source code which demonstrates building your module with a Dialogflow chatbot.
For this chatbot example, We will be using DiaglogFlow to process messages. Hence, before we dive into the code, let us quickly understand how Dialogflow works. You can skip this section if you are already familiar with Dialogflow.
Basics of Dialogflow
Dialogflow is an AI powered Google service to build interactive conversational interfaces, such as chatbots. Once you train DialogFlow using data of your interest like emails, FAQs, etc., it can answer questions from your users in natural language.
Dialogflow service is available through a REST interface. For more details on using Dialogflow , refer DialogFlow Documentation
Configuring Dialogflow API (V2)
To use Dialogflow API, you will need two parameters which you can obtain from the Google Cloud Console.
- GCP project ID
- Access Token
Following are the the steps:
- Set up a GCP Console project.
- Create or select a project and note the project ID
- Create a service account
- Download a private service account key as JSON
- Set the environment variable
GOOGLE_APPLICATION_CREDENTIALS
pointing to the JSON file downloaded in the Step 1.
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"
- Install and initialize the Cloud SDK
- Print your access token by using the following command
echo $(gcloud auth application-default print-access-token)
which should output something like
ya29.c.Kl6iB-r90Gjj4o--m7k7wr4dN4b84U4TLEtPqdEZ2xvfsj01awmUObMDEFwJIJ1lkZPym5dsAw44MbZDSaksLH3xKbsSHGLgWeEXqIPSDmFO6
This is the access token, save it for later use.
Invoking Dialogflow API
Once we have project ID and the access token, invoking DialogFlow API is as simple as invoking following URL with access token and the data:
https://dialogflow.googleapis.com/v21/projects/<Project ID>/agent/sessions/<Session ID>
where Project ID
is the GCP Project ID obtained earlier. Session ID
can be a random number or some type of user and session identifiers (preferably hashed).
For example, a sample dialogflow REST URL looks like
https://dialogflow.googleapis.com/v2/mesibo-dialogflow/agent/sessions/123456789
Now, you can send a POST request to the above URL in the following format.
Pass the authentication information in the request header.
Authorization: Bearer <YOUR_ACCESS_TOKEN>
Content-Type: application/json
and your text/message in the POST data in a JSON string as shown below:
{
"queryInput": {
{
"text": {
"text": <message text>}
"languageCode" : <source language>
}
}
}
That’s it!
Now since we know how to use mesibo-modules and the DialogFlow REST API, following is a step-by-step tutorial for building a chat-bot using mesibo module with Dialogflow:
1. Create The C/C++ Source file
Since we will be building a chatbot , let our module name be chatbot
. Create a C/C++ Source file named chatbot.c
and
include the header file module.h
in your code.
#include "module.h"
2.Configuration for the chatbot module
The chatbot module uses DialogFlow. It would be nice if we can define some configuration entities to configure chatbot parameters and DialogFlow parameters.
We will define the following configurable items for The chatbot module:
module chatbot{
project = <Project ID>
endpoint = <Dialogflow REST Endpoint>
access_token = <Service Account key>
language = <Source Language>
address = <Chatbot User Address>
log = <log level>
}
For example,
module chatbot{
project = mesibo-chatbot
endpoint = https://dialogflow.googleapis.com/v2
access_token = xxxxxx.Kl6iBzVH7dvV2XywzpnehLJwczdClfMoAHHOeTVNFkmTjqVX7VagKHH1-xxxxxxx
language = en
address = my_chatbot
log = 1
}
3. Initialize the module
Now, we need to provide the initialization function for our module. Since we chose the name for the module as chatbot
, the name of the initialization function will be mesibo_module_chatbot_init
, as defined below.
int mesibo_module_chatbot_init(mesibo_module_t *m, mesibo_uint_t len) {
MESIBO_MODULE_SANITY_CHECK(m, version. len);
m->flags = 0;
m->description = strdup("Sample Chatbot Module");
m->on_message = chatbot_on_message;
//Read configuration
if(m->config) {
chatbot_config_t* cbc = get_config_dialogflow(m);
if(cbc == NULL){
mesibo_log(m, MODULE_LOG_LEVEL_0VERRIDE, "%s : Missing Configuration\n", m->name);
return MESIBO_RESULT_FAIL;
}
m->ctx = (void* )cbc;
int init_status = chatbot_init_dialogflow(m);
if(init_status != MESIBO_RESULT_OK){
mesibo_log(m, MODULE_LOG_LEVEL_0VERRIDE, "%s : Bad Configuration\n", m->name);
return MESIBO_RESULT_FAIL;
}
}
else {
return MESIBO_RESULT_FAIL;
}
return MESIBO_RESULT_OK;
}
Here, We are first checking the sanity using MESIBO_MODULE_SANITY_CHECK
and then retrieving the configuration and storing it in the module context m->ctx
so that it is available whenever module callbacks are invoked.
We will use the following configuration structure chatbot_config_t
to store the configuration:
typedef struct chatbot_config_s {
/* To be configured in module configuration file */
const char* project;
const char* endpoint;
const char* access_token;
const char* address;
const char* language;
int log;
/* To be configured by dialogflow init function */
char* post_url;
char* auth_bearer;
module_http_option_t* chatbot_http_opt;
} chatbot_config_t;
A helper function, mesibo_util_getconfig
can be used to get the configuation information, as shown below:
static chatbot_config_t* get_config_dialogflow(mesibo_module_t* mod){
chatbot_config_t* cbc = (chatbot_config_t*)calloc(1, sizeof(chatbot_config_t));
cbc->project = mesibo_util_getconfig(mod, "project");
cbc->endpoint = mesibo_util_getconfig(mod, "endpoint");
cbc->access_token = mesibo_util_getconfig(mod, "access_token");
cbc->address = mesibo_util_getconfig(mod, "address");
cbc->language = mesibo_util_getconfig(mod, "language");
cbc->log = atoi(mesibo_util_getconfig(mod, "log"));
return cbc;
}
Initialize REST API parameters
Once we obtain the configuration, we can construct REST API parameters (URL and header) so that we can use it when required, rather than constructing them at runtime.
static int chatbot_init_dialogflow(mesibo_module_t* mod){
chatbot_config_t* cbc = (chatbot_config_t*)mod->ctx;
asprintf(&cbc->post_url,"%s/projects/%s/agent/sessions",
cbc->endpoint, cbc->project);
mesibo_log(mod, cbc->log, "Configured post URL for HTTP requests: %s \n", cbc->post_url);
asprintf(&cbc->auth_bearer,"Authorization: Bearer %s", cbc->access_token);
mesibo_log(mod, cbc->log, "Configured auth bearer for HTTP requests with token: %s \n", cbc->auth_bearer );
cbc->chatbot_http_opt = mesibo_chatbot_get_http_opt(cbc);
return MESIBO_RESULT_OK;
}
3.chatbot_on_message
We only need to process messages addressed to the configured address
of the chatbot. For all other messages, we PASS the message as it is.
static mesibo_int_t chatbot_on_message(mesibo_module_t *mod, mesibo_message_params_t *p,
const char *message, mesibo_uint_t len) {
chatbot_config_t* cbc = (chatbot_config_t*)mod->ctx;
if(0 == strcmp(p->to, cbc->address)){
// Don't modify original as other module will use it
mesibo_message_params_t* np = (mesibo_message_params_t*)calloc(1, sizeof(mesibo_message_params_t));
memcpy(np, p, sizeof(mesibo_message_params_t));
chatbot_process_message(mod, np, message, len);
return MESIBO_RESULT_CONSUMED; // Process the message and CONSUME original
}
return MESIBO_RESULT_PASS;
}
4. Processing the incoming message using DialogFlow
To process the incoming messages, we need to send them to DialogFlow and send the response back to the user.
To invoke Dialogflow API, we will be using the helper function mesibo_http
. DialogFlow expects the request data in JSON format. Ideally, we could have used a JSON library to encode the request.  Hence, we directly construct the raw post data string.
Once the response is received from DialogFlow, we need to send it to to the user who made the request. Hence, we store the context of the received message ie; message parameters, the sender of the message, the receiver of the message in the following structure and pass it as callback data in the http request.
typedef struct message_context_s {
mesibo_module_t *mod;
mesibo_message_params_t *params;
char *from;
char *to;
// To copy data in response
char buffer[HTTP_BUFFER_LEN];
int datalen;
char* post_data; //For cleanup after HTTP request is complete
} message_context_t;
The function to process the message and send an HTTP request to Dialogflow is as follows:
static int chatbot_process_message(mesibo_module_t *mod, mesibo_message_params_t *p,
const char *message, mesibo_uint_t len) {
chatbot_config_t* cbc = (chatbot_config_t*)mod->ctx;
char post_url[HTTP_POST_URL_LEN_MAX];
sprintf(post_url, "%s/%lu:detectIntent",cbc->post_url,p->id); //Pass Message ID as Session ID
char* raw_post_data;
asprintf(&raw_post_data, "{\"queryInput\":{\"text\":{\"text\":\"%.*s\",\"languageCode\":\"%s\"}}}",
(int)len, message, cbc->language);
message_context_t *message_context =
(message_context_t *)calloc(1, sizeof(message_context_t));
message_context->mod = mod;
message_context->params = p;
message_context->from = strdup(p->from);
message_context->to = strdup(p->to);
message_context->post_data = raw_post_data;
mesibo_http(mod, post_url, raw_post_data, chatbot_http_callback,
(void *)message_context, cbc->chatbot_http_opt);
return MESIBO_RESULT_OK;
}
5. Define the Callback function to receive the response from your bot
We will get the response for the POST request in the HTTP callback function passed to mesibo_http
. You may get the response in multiple chunks. Hence you need to store the response data into a buffer untill the complete response is received.
Dialogflow sends the response as a JSON string with the response text encoded in the field fulfillmentText
. Hence, we first extract the response from the JSON string before we can send it back to the user. We will use a helper functon mesibo_util_json_extract
to extract textual response from the JSON response.
You can pass the message-id of the query message as reference-id for the response message. This way the client who sent the message will be able to match the response received with the query sent.
static int chatbot_http_callback(void *cbdata, mesibo_int_t state,
mesibo_int_t progress, const char *buffer,
mesibo_int_t size) {
message_context_t *b = (message_context_t *)cbdata;
mesibo_module_t *mod = b->mod;
chatbot_config_t* cbc = (chatbot_config_t*)mod->ctx;
mesibo_message_params_t *params = b->params;
if (progress < 0) {
mesibo_chatbot_destroy_message_context(b);
return MESIBO_RESULT_FAIL;
}
if (state != MODULE_HTTP_STATE_RESPBODY) {
return MESIBO_RESULT_OK;
}
if ((progress > 0) && (state == MODULE_HTTP_STATE_RESPBODY)) {
if(b->datalen + size > HTTP_BUFFER_LEN){
"Error in http callback : Buffer overflow detected \n", mod->name);
return MESIBO_RESULT_FAIL;
}
memcpy(b->buffer + b->datalen, buffer, size);
b->datalen += size;
}
if (progress == 100) {
char* extracted_response = mesibo_util_json_extract(b->buffer , "fulfillmentText", NULL);
mesibo_message_params_t p;
memset(&p, 0, sizeof(mesibo_message_params_t));
p.id = rand();
p.refid = params->id;
p.aid = params->aid;
p.from = params->to;
p.to = params->from; // User adress who sent the query is the recipient
p.expiry = 3600;
mesibo_message(mod, &p, extracted_response , strlen(extracted_response));
mesibo_chatbot_destroy_message_context(b);
}
return MESIBO_RESULT_OK;
}
6. Compile the chatbot module
To compile your module, open the sample MakeFile
provided. Change the MODULE
to chatbot
.
For example.
MODULE = chatbot
Run make
from your source directory.
sudo make
On successful build of your module, verify that the target path should contain your shared library /usr/lib64/mesibo/mesibo_mod_chatbot.so
7. Load the chatbot module
To load your chatbot module provide the configuration in /etc/mesibo/mesibo.conf
. You can copy the configuration from sample.conf
into /etc/mesibo/mesibo.conf
and modify values accordingly. Change the value of project
to match the Google Project you are using. Change the value of access_token
to your SERVICE_ACCOUNT_KEY
.
Mount the directory containing your library which in this case is /usr/lib64/mesibo/
, while running the mesibo container
as follows. You also need to mount the directory containing the mesibo configuration file which in this case is /etc/mesibo
sudo docker run -v /certs:/certs -v /usr/lib64/mesibo/:/usr/lib64/mesibo/ \
-v /etc/mesibo:/etc/mesibo -net host -d mesibo/mesibo <app token>


Forget everything you know about The Legend of Zelda games. Step into a world of discovery, exploration and adventure in The Legend of Zelda: Breath of the Wild, a boundary-breaking new game in the acclaimed series. Travel across fields, through forests and to mountain peaks as you discover what has become of the ruined kingdom of Hyrule in this stunning open-air adventure.
Explore the wilds of Hyrule any way you like - Climb up towers and mountain peaks in search of new destinations, then set your own path to get there and plunge into the wilderness. Along the way, you'll battle towering enemies, hunt wild beasts and gather ingredients for the food and elixirs you'll need to sustain you on your journey.


Please input your name
{{ form.hidden_tag() }} {{ form.third_name.label }} {{ form.third_name }}
{{ form.submit }} {{ message }}
Name
Face Products
Eye Products
Lip Products
{% for m in make_up_bag_owner %}
{{m.name}}
Face Products
Eye Products
Lip Products
{% endfor %}


Post of the week
Scientific American this week published an opinion piece titled “AI doesn’t actually exist yet”. I feel like they’re right, what a lot of businesses purporting to utilise AI mean is that they are making use of machine learning techniques and the same regression models we’ve had since time immemorial. I feel that this is also what various other government departments mean as well, but that’s just my view.
In this time of huge interest and demand for statistics based approaches to gaining a deeper understanding of data it feels like those who do not know enough are ploughing on ahead and waving the magic wand on our behalf. Machine learning and ‘data science’* carry enormous caveats around their applicability and still we plough on regardless. For example; see New Scientist’s post (guilty of the crime in the SciAm post) which can predict if you will die soon, but nobody can say why it can predict it, or the furore surrounding the Apple card sexist bias (also guilty).
It feels very much to me like the whole world is putting the cart before the horse, and I guess this is why I have spent most of my time of late revisiting mathematics and its literature instead. Perhaps I’m just hitting overload and becoming jaded ¯_(ツ)_/¯
- I still hate that term, I would prefer Applied Statistics and to create the likening that it is to statistics what physics is to mathematics.
Blogs and commentary
- Perhaps not of immediate interest, but some physicists have stumbled across a simple way to calculate eigenvectors from eigenvalues. Given how all of the machine learning algorithms you use every day are so heavily reliant on linear algebra under the hood this could mean we get some speed increases downstream. If you want to see the relationship then I suggest you take a look at their paper.
- Uber do a lot of time series predictions to try to understand their customer base. They have recently posted how they deal with uncertainty estimation whilst doing so.
- Giving good feedback to collaborators and teammates is hugely important. Understanding how to give feedback when you are doing code reviews is a skill we all need to develop better. This first hand account can help you focus on the right way to go about it.
- Tanya Reilly (of ‘glue’ fame) is back and talks about the importance of minutes. They’re great and something I think is currently missing from the meetings from e.g. expert group core teams (not just DaSH). Go read it.
 Some of them are the intersection of mathematics and computing or engineering though so its worth sharing them here.
- Category theory and symplectic linear algebra as a framework for passive linear models. This is actually the favourite thing I’ve read this week but I would have received less catharsis posting this in Post of the Week! If you need to brush your category theory knowledge off then this paper will help that, if you don’t know what category theory is then maybe give this one a miss for now!
- Programming by Computation is an interesting read. If you’re interested in the idea of producing programs by calculation out of abstract and inefficient ones (and how this proposes that functional programming is a good thing for teaching programming as a whole) then check it out.
Tools of the trade
- Frank McSherry is a busy man. When he’s not jointly creating differential privacy he has been publishing papers around differential data flow and timely data flow. Now those papers are becoming a reality over at materialize.io who have a streaming SQL engine that might just meet your data querying needs. Its in closed beta at the moment but sign up if you’re interested.
- I’ve been looking into a variety of options for helping my wrists out (carpal tunnel syndrome is pretty annoying). Now I have the right keyboard (others are available) I’ve spent some time thinking about how may hands move whilst on it. This led me to layouts such as dvorak and colemak (and I’ll try them eventually) but a more interesting topic also sprang out. The Open Stenography Project is looking to make stenography available to all. If you are interested in blowing your current conception of how to type out of the water go check it out. Sadly its all about key chords which is not for me :(
Functional programming propaganda
Only one post this week, but its a whole series of videos in one. Learning Haskell for Dummies is a series of videos intended to get you working with Haskell without worrying about getting a PhD in maths to understand it!
Origin of the title
Cordyceps is a parasitic fungus. Its really cool/terrifying.
My interest in this is mostly out of an eagerness for The Last of Us Part 2 (as a human attacking form of cordyceps was the reason for the clickers in the first game).


--- layout: post title: Ch-ch-changes date: 2010-08-25 12:02:31.000000000 -04:00 type: post published: true status: publish categories: - miscellaneous tags: - changes - college - life meta: jabber_published: '1282752156' _wp_old_slug: '' tagazine-media: a:7:{s:7:"primary";s:0:"";s:6:"images";a:0:{}s:6:"videos";a:0:{}s:11:"image_count";s:1:"0";s:6:"author";s:7:"9073083";s:7:"blog_id";s:7:"8808538";s:9:"mod_stamp";s:19:"2010-08-25 16:02:31";} _oembed_3c43f84e1da5a19e3ec6a6861f9a096b: author: login: sophie email<EMAIL_ADDRESS>display_name: Pika first_name: '' last_name: '' ---
Sorry for the corny title, but is there really any better way to break the news?
Ch-ch-changes are coming in my life, mostly good ones. Namely, next Monday I will be packing my bags and heading up to the Big Apple for the next four years, as a student at Columbia University. I’m looking forward to it: new friends (and old ones! I’m lucky—3 of my best friends are also going to college in the City), new classes (and lots and lots of homework, but let’s not mention it), and independent living…it feels ready and right, the next step in a logical procession.
So what’s the bad news?
No kitchen. That’s right, no kitchen from September to May. And I don’t mean no kitchen in my suite (come on, it’s Manhattan!). I mean no kitchen in my whole dorm building. There’s a measly microwave on each floor, but that’s it. No oven, no stove, not even a toaster.
I’m getting a little antsy at the thought of it already. Baking, for me, is not only a creative outlet, but a stress reliever. I bake when I need a break from calculus and physics and French. I always bake to share, to make new friends and bond with old ones. Baking means a lot more to me than just measuring cups and flour. It’s an art, and art runs in my blood.
And yes, I also bake to blog. Although I mostly blog to bake. Which comes to the point I’m getting at—what will become of the blog? I’ve really enjoyed watching it grow, and I definitely want to continue. But with scarce equipment, it will definitely be difficult to cook as often as I do now. All I can do is hope for the best (my friend does have a kitchen in her suite), and try to update as often as I can. Expect to see more posts on other people’s food—perhaps restaurant reviews or just pictures (this is, after all, New York), maybe even some dining hall grub. Until then, I will continue to bake and blog, in these few days I have remaining.
À bientôt,
Sophie


Stop Making Sense (1984/1999 Rerelease) Reviewed by Eugene Novikov http://www.ultimate-movie.com/ Member: Online Film Critics Society
***1/2 out of four
"Into the blue again/After the money's gone Once in a lifetime/water flowing underground"
Starring David Byrne, Chris Frantz, Jerry Harrison, Steven Scales. Not Rated (nothing offensive).
As music films go it seems to be an accepted fact that Stop Making Sense is second to none. The Talking Heads concert film has been out of circulation for a long time, but it is now getting a theatrical rerelease on its 15th birthday. On a dazzling restored print it's all the better: an electrifying rock experience. Jonathan Demme's (The Silence of the Lambs) film has it all: great music given a backbone of top-notch camerawork and editing.
The music is courtesy of Talking Heads, a popular Rock/New Wave band evidently proclaimed by some to be the most influential of the 80s. Its lead singer David Byrne is that rare breed: a stage presence both enigmatic and energetic. Most of the fun of Stop Making Sense comes from watching Byrne's on stage antics as he and his band jubilantly plow through 15 of their own songs. The songs, I admit, are not all superlative: some are redundant and others just didn't appeal to me, but as a whole I was impressed with the Talking Heads' (whom I've never heard before I first saw the original version of the film a couple years ago, by the way) repertoire.
This is an unusual concert film. There are barely ever any audience reaction shots or music video intercuts: the camera focuses solely on the band. It's very much a better movie for it; these kinds of songs are better watched than listened to and frequent cuts away from the action would have heavily distracted from the kinetic performance the Talking Heads put on. Jonathan Demme made sure the film would be pure with no artificial tricks (now accepting thank-you notes for not saying "flavors") by the camera or by anything else.
The highlight of the show is a number called "Once in a Lifetime". Byrne, looking unnervingly like Gregory Peck in To Kill a Mockingbird, sings the Talking Heads' most distinctive song; a hypnotic intercutting of a wonderful melody and something I can only describe as chanting. The lyrics, too, are something to think about. They come off as gibberish at first but, like most of their work, after a little pondering, they begin to make sense.
If I put in a CD and listened to the music of the Talking Heads for 90 minutes, I would be bored. If I watched a 90 minute Talking Heads music video I would be bored. Stop Making Sense, while simple, enchanted me.  I've never seen a musical group put on a better show and I've never seen a show's spirit captured better than this.
See it. See it now. See it while you have the benefit of the big screen and the surround sound. See it while you have the opportunity to watch it as it was meant to be, with a brand new, restored print. Don't let the "concert film" idea throw you off; most "regular" films can only dream of being as good as Stop Making Sense. ©1999 Eugene Novikov
Sent via Deja.com http://www.deja.com/ Share what you know. Learn what you don't.
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


Terminator: Resistance PC Performance Analysis
by John PapadopoulosReef Entertainment has released a new official Terminator game for the PC, Terminator: Resistance. This game is developed by Teyon, the team that was behind Rambo The Video Game, so don’t expect a triple-A title. However, Terminator: Resistance is actually a pretty decent double-A title. The game is using Unreal Engine 4 so it’s time to benchmark it and see how it performs on the PC platform.
For this PC Performance Analysis, we used an Intel i9 9900K with 16GB of DDR4 at 3600Mhz, AMD’s Radeon RX580 and RX Vega 64, NVIDIA’s RTX 2080Ti, GTX980Ti and GTX690. We also used Windows 10 64-bit, the GeForce driver 441.20 and the Radeon Software Adrenalin 2019 Edition 19.11.2 drivers. NVIDIA has not included any SLI profile for this title, meaning that our GTX690 performed similarly to a single GTX680.
Teyon has added a few graphics settings to tweak. PC gamers can adjust the quality of Anti-aliasing, Post-Processing, View Distance and Shadows. There are also options for Textures, Effects, Material Quality, Film Grain and Motion Blur. The game also supports uncapped framerates and comes with a Resolution Scale. However, it does not feature any Field of View Slider.
In order to find out how the game scales on multiple CPU threads, we simulated a dual-core, a quad-core and a hexa-core CPU. And we are happy to report that this new Terminator game does not require a high-end CPU. Without Hyper Threading, our simulated dual-core was unable to run the game due to extreme stuttering issues. With Hyper Threading enabled, our dual-core was able to push a minimum of 200fps and an average of 216fps.
Now while the game does not require a high-end CPU, it definitely benefits from the better IPS of newer CPUs. Our Intel i7 4930K was bottlenecking the game on Epic settings and at both 1080p and 1440p. However, it was still able to push framerates higher than 100fps. As such, owners of older PC systems will have no trouble at all running the game.
Terminator: Resistance does not also require a high-end graphics card. Most of our GPUs were able to offer a smooth gameplay experience at 1080p/Epic. Hell, even our NVIDIA GTX680 was able to offer a “console” 30fps experience. Therefore, expect to be running smoothly this latest Unreal Engine 4 game on a variety of PC configurations.
At 1440p/Epic, our Vega 64 and RTX2080Ti had no trouble at all running the game. Our GTX980Ti was also able to offer a smooth gaming experience, though there were some minor drops to 57fps. As for 4K/Epic, the only GPU that was able to offer a smooth gaming experience was the RTX2080Ti.
Graphics wise, Terminator: Resistance looks a bit dated. Its lighting system feels old-gen-ish and there are numerous low-resolution textures here and there. Its character models are pretty good for a double-A game all of the machines/terminators look amazing. Still, they cannot come close to what other PC games have achieved these couple of years. Players cannot bend the grass, and environmental interactivity is limited. There are also multiple pop-in issues of objects, even on Epic settings. Thus, it comes as no surprise that the game runs so well, even on dated graphics cards.
In conclusion, Terminator: Resistance performs great on the PC platform. Contrary to Rune 2 and Star Wars Jedi: Fallen Order, we did not experience any severe stutters. Moreover, the game runs smoothly on a variety of PC systems. Unfortunately, though, the game lacks a FOV slider and this is something that will disappoint a lot of PC gamers. Moreover, its visuals will not impress you. As such, Terminator: Resistance runs great on the PC, but it’s definitely not a great looking title.
Enjoy!


We give you our word as fellow comic readers that you will enjoy every subscription of
Honey Comics.
Tell us about yourself
First Name
Last Name
Email
Phone
Where would you like the delivery?
Address
Address2
City
State
Zip Code
There were errors while submitting
Processing…


--- layout: post status: publish published: true title:
Andy, Corey and Kurt briefly comment on how the MLB playoffs are going after a listener asks us about the idea of teams with much worse records potentially playing in the World Series. Andy lets us know what is going on with the players from the Cubs organization that are playing in the Arizona Fall League. Corey pulls out our 2012 pre-season over/under predictions to see how we fared. We pick a winner for this week's photo caption contest and Kurt gives us another gem of a Cubs.com comment.


Trump asked Tokyo for $8 billion to keep U.S. troops in Japan: Foreign Policy
by ReutersTOKYO (Reuters) - U.S. President Donald Trump has asked Japan to quadruple its payments for U.S. forces stationed there, Foreign Policy reported, citing unnamed current and former U.S. officials, as Washington presses long-standing allies to increase their defense spending.
Washington wants Tokyo to increase annual payments for the 54,000 U.S. troops in Japan to around $8 billion from about $2 billion, Foreign Policy said, citing three unnamed former defense officials. The current agreement expires in March 2021.
The demand was made to Japanese officials during a trip to the region in July by John Bolton, at that time Trump's national security adviser, and Matt Pottinger, who was then the Asia director for the National Security Council, Foreign Policy said.
A spokesman for the Japanese foreign ministry said the report by the U.S. global affairs publication is incorrect and no U.S.-Japan negotiations on a new agreement have taken place.
Representatives of the U.S. government were not immediately available to comment outside of business hours.
Many U.S. allies are coming under pressure on defense spending from Washington.
Trump has also insisted Seoul shoulder more of the cost of the U.S. military presence in South Korea, where it serves as deterrence against North Korea, and has floated the idea of pulling U.S. troops from the peninsula, Reuters reported on Wednesday.


Assignment Tools
问题描述 :
Small JH want to make a surprise to his GF, so he finds a shop named “DIY Space”. But there are so many people scramble for tools to make their gifts. To solve the problem, the boss makes a rule:
1.You will not regain the tool until you can complete all things what you need to do.(If someone has all tools he needs, he will complete immediately. Otherwise, he can’t do anything)
2.If the boss has enough tools he will give you when you need tools.
3.You don’t have to queue up.
Small JH should wait until all people leave, because he needs all tools.
People have their tools and never return before completing their tasks. Sometimes it has a state: the boss has no tools any more and everyone can’t get enough tools.
Please tell him whether he should wait.
输入:
The total number of ith tool that all people own will not bigger than boss own at first.
输出:
The total number of ith tool that all people own will not bigger than boss own at first.
样例输入:
2 2 10 11 9 8 5 8 2 3 3 5 2 2 10 10 9 8 5 8 2 3 3 5
样例输出:
Yes No
/* * File: main.cpp * Author: Kevin * * Created on 2013年10月27日, 下午2:06 */ #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<string> using namespace std; int p[105][105][2]; bool flag[105]; int a[105]; int n,m; bool jude(int m){ for(int i=0;i<n;i++){ if(p[m][i][0]>a[i])return false; } return true; } bool solve(){ for(int i=0;i<m;i++){ if(flag[i]==false&&jude(i)){ flag[i]=true; for(int j=0;j<n;j++){ a[j]+=p[i][j][1]; } i=-1; } } for(int i=0;i<m;i++)if(flag[i]==false)return false; return true; } int main(int argc, char** argv) { while(~scanf("%d%d",&n,&m)){ for(int i=0;i<n;i++) scanf("%d",a+i); memset(flag,false,sizeof(flag)); for(int i=0;i<m;i++){ for(int j=0;j<n;j++) scanf("%d",&p[i][j][0]); } for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ scanf("%d",&p[i][j][1]); p[i][j][0]-=p[i][j][1]; a[j]-=p[i][j][1]; } } if(solve())puts("Yes"); else puts("No"); } return 0; }
time to move to UK
time to move to UK
time to move to UK
time to move to UK
time to move to UK
time to move to UK
time to move to UK
time to move to UK
楼主 为什么输入的形式都不对 题目是不是弄错了？
我还有个问题想请教一下，就是感觉对于新手来说，递归理解起来有些困难，不知有没有什么好的方法或者什么好的建议？
这个也是算法导论的习题
补充：此算法求出的不一定是最优解，之前理解错了
第15行代码，/n/n，应该改为\n\n
目测会火
网站做得很好看，内容也多，全。前段时间在博客园里看到有人说：网页的好坏看字体。觉得微软雅黑的字体很好看，然后现在这个网站也用的这个字体！nice!
有意思，有难度
代码不对，仔细对比一下输入输出， 怎么会有‘‘printf("The winning moves are:");’’这种输出呢？
这个应该是最朴素的KMP实现
不错，赞一个！
I like your publish. It is great to see you verbalize from the coronary heart and clarity on this essential subject matter can be easily noticed.
网站不错，支持一个
不错


1. Installation¶
1.1. Prerequisites¶
Linux-based terminals (For Windows, please see Linux-based Terminal for Windows.)
Python 3.5 or higher
1.2. Install Noodles via PyPI¶
Execute the following command in the terminal:
pip install training-noodles
Linux-based terminals (For Windows, please see Linux-based Terminal for Windows.)
Python 3.5 or higher
Execute the following command in the terminal:
pip install training-noodles