I've been doing some reading about Constructivist educational theories, related to OLPC. I came upon this:
I react strongly against the thought that we need to provide children with only a set of intellectual processes -- a dry, contentless set of tools that they can go about applying. I believe that the tools cannot help developing once children have something real to think about; and if they don't have anything real to think about, they won't be applying tools anyway. That is, there really is no such thing as a contentless intellectual tool. If a person has some knowledge at his disposal, he can try to make sense of new experiences and new information related to it. He fits it into what he has. By knowledge I do not mean verbal summaries of somebody else's knowledge. I am not urging textbooks and lectures. I mean a person's own repertoire of thoughts, actions, connections, preductions, and feelings. Some of these may have as their source something read or heard. But the individual has done the work of putting them together for himself or herself, and they give rise to new ways to put them together.
-- Eleanor Duckworth, The Having of Wonderful Ideas pg 13
A little earlier I was reading an article Hole-in-the-Wall which I found very interesting, and saw some connection here:
Well, I tried another experiment. I went to a middle-class school and chose some ninth graders, two girls and two boys. I called their physics teacher in and asked him, "What are you going to teach these children next year at this time?" He mentioned viscosity. I asked him to write down five possible exam questions on the subject. I then took the four children and said, "Look here guys. I have a little problem for you." They read the questions and said they didn't understand them, it was Greek to them. So I said, "Here's a terminal. I'll give you two hours to find the answers."
Then I did my usual thing: I closed the door and went off somewhere else.
They answered all five questions in two hours. The physics teacher checked the answers, and they were correct. That, of itself, doesn't mean much. But I said to him, "Talk to the children and find out if they really learned something about this subject." So he spent half an hour talking to them. He came out and said, "They don't know everything about this subject or everything I would teach them. But they do know one hell of a lot about it. And they know a couple of things about it I didn't know."
One of the most exciting things about OLPC is simply about bringing internet access to these children.  It's limited because it is just content, it is not the kind of informed and wordly intellectual toolset Duckworth talks about. The problem with the laptop is that it is far better at conveying information than process, so it is very possible it could become just a textbook, and children would only interact by creating "verbal summaries of somebody else's knowledge". This particularly resonates with me, because that style of education was particularly frustrating to me as a student.
The good thing about the laptop (combined with the internet) is that the internet has such an overwhelming quantity of information it doesn't work well for textbook-style education. You don't read the internet and then answer questions to check your reading comprehension. Even a more constrained set of content like Wikipedia is structured in a non-linear form; you can't make it linear even if you want to.
Of course you can still put a textbook online. You can still force students to read it linearly and respond to it in a controlled and limited way. The internet and this laptop are not coercive, and they can't force instructors to do something. They can only help clear a path to a better kind of education; of that I'm optimistic.
Nice post, man! Thanks for sharing; going to pass this on to some non-programmer friends of mine.
+1
Constructivist educational theories are wonderful, but I think it is still important to approach the OLPC project from a critical distance. To caricature the current laptop deployment plan, OLPC is essentially going to airdrop a few million laptops into these countries and rely on the children's intrinsic curiosity to crack open the clamshell and start tinkering with these tools. One cynical response I have heard to this project is that educators have succeeded in providing most children in the world with the technology of pencil and paper, and that has not resulted in a rise of world literacy.
From what I understand, OLPC is not yet focusing on the development of curriculums and strategies for teachers to effectively integrate these new tools in their classroom, or encouraging the exchange of these practices as they emerge. Radical constructivism might wish away the classroom (and its associated hierarchy), but it is still the organizational structure shaping education in most of the world. It would certainly be a shame if the laptop ended up in a cubby during the for the entire schoolday because faculty did not have a clear idea what to do with the tool.
I am reminded of a recent occasion where I heard Seymor Papert speak at Teachers College. - In ten minutes he was able to use logo to demonstrate the concept of a mathematical theorem and introduce the foundations of calculus. The trouble was, Seymor is one of the few teachers able to do this with logo. My sixth grade logo teacher had us doodling and scribbling - arguably we learned a bit about programming and control structures, but the unstructured play time did not translate into mathematical insights. Perhaps the lesson here is that a good teacher can make any instrument sing and dance, but not everyone is a good teacher, and I am not convinced that logo was a demonstrated constructivist success story.
Providing the third world with access to the Internet certainly has an incredible ammount of potential. But don't confuse potential good for actual good. It is dangerous not to question the idea that technology and access to information necessarily lead to greater social justice and good in the world. We should be asking ourselves what we can do to help insure the OLPC doesn't just end up bringing porn to the third world, or worse.
tempering the
One cynical response I have heard to this project is that educators have succeeded in providing most children in the world with the technology of pencil and paper, and that has not resulted in a rise of world literacy.Sounds like a kind of dumb response too. Literacy rates have risen (if you account for our ever-more-stringent definitions of literacy). Some educational pessimism is just delusionally critical, spouting untruths that are simply absurd but seem to have gained traction due to sloppy thinking, like ideas that our educational outcomes have been slipping over time. Is pencil and paper responsible for the increases in literacy? I dunno, but lack of pencil and paper certainly can't help.
These kinds of critisms are unconstructive and unhelpful, and usually brought up by people who are so full of negative energy and cynicism that they are simply lost causes. They cannot be convinced because they are all too willing to switch to another criticism when the last one is satisfied.
I don't think you are such a person, but I would prefer you not use their arguments even in a devil's advocate role. (I also hate the devil's advocate role, as I find it intellectual dishonest; self-labelling dishonesty does not excuse dishonesty! Speculating on negative outcomes does not have to take the form of intellectual sniping.)
From what I understand, OLPC is not yet focusing on the development of curriculums and strategies for teachers to effectively integrate these new tools in their classroom, or encouraging the exchange of these practices as they emerge.OLPC is very much focusing on hardware right now. From what I can tell, curriculum development is outside of OLPC's scope and ability, and it's not something OLPC will be trying to develop. OLPC will be building the software infrastructure to go with the laptop, which will provide the context in which curriculum is developed. (As an open source platform, even that infrastructure could be thrown away if people really don't like it.)
This infrastructure work is very strongly informed by the collaboration found on the web and in wikis. Certainly the exchange of ideas among teachers will be a very important part of this infrastructure.
Providing the third world with access to the Internet certainly has an incredible amount of potential. But don't confuse potential good for actual good. It is dangerous not to question the idea that technology and access to information necessarily lead to greater social justice and good in the world.Certainly it's important to think about this. But OLPC is also a leap of faith, and must be so. It is not a tool to make the classrooms of developing nations look like the classrooms of industrial nations. It is not an effort to come up with the perfect curriculum or teaching philosophy that can reform education and the world. These are not reasonable goals, and may not be very positive goals.
As a result, OLPC cannot have concrete and specific educational goals. It is a tool, and we do not know how it will be used; we cannot know how it will be used because that would necessarily exclude the laptop users from determining how they will use it.
Obviously the laptop could be used for negative ends. It could simply reinforce current power structures, or cause familial collapse, or any number of bad things. Trusting in the good of human nature, I am very optimistic about empowering individuals through the laptop. Because of the nature of the project, it really does empower the individual more than any institution. The fundamental goals of the laptop project focus very much on this; having one laptop per child, teachers using a system that is a peer to the other laptops, a relatively unconstrained environment, and an emphasis on peer communication. I trust individuals.
To force any particular outcome would undo the laptop's most noble goals, in my opinion. The outcome of individual self-determination must be unknown, otherwise it is not truly self-determined.
We should be asking ourselves what we can do to help insure the OLPC doesn't just end up bringing porn to the third world, or worse.Of course there are many practical issues involved with the laptop, and we can see at least many of them in how children are effected by the internet currently. We're very concerned about spam, security, and there's a lot of questions about what degree a child should be exposed to a larger world, one which may be predatory or just manipulative. I doubt we'll figure this out before the laptop is released, in part because the problems will probably only emerge some time after the laptop is out. But we can probably predict much of it -- as is often the case in the developing world, we'll see many of the same issues that the industrial nations have experienced, just delayed a bit.
Constructive (and especially concrete) input on these issues is very much appreciated. If I seem snippy at the top of this (and I probably am), it's only in response to a certain kind of unconstructive criticism that OLPC seems to be getting a lot of.
# Ian Bicking
Just to be clear - I am very excited about this project and its potential, and I would like to believe that I am contributing constructively to its positive impact. There are plenty of very wise and experienced people who I respect immensely who have claimed that OLPC is one of the most important and trans formative projects happening right now. Other people I know seem to be hedging their optimism (cautiously optimistic?), holding their cards close waiting to see how the early phases of this project pan out. But I think you are onto something important with the idea that what is needed here is a leap of faith, not cynicism. This could be the most appropriate response to the skeptics.
As for concrete suggestions, I think that educational schools should be jumping at the opportunity to engage this project, and should already be running graduate seminars arguing about and designing OLPC applications. Conferences and panels should be assembled, and people - educators, developers, students, parents - should be imagining and asking themselves what they would want this tool to be used for. Organizations should be independently seeking out their own funding sources, for their own projects around the laptop, not relying on OLPC for permission, blessing, or authority. And, of course, the spirit and tradition of free culture permits and encourages just this. Anyone can get involved. There is no "they", just a "we" that needs to will these changes into existence.
If all goes according to the OLPC plan, the laptop may become a vital communications channel, separate from the internet. I can imagine educational materials deployed to the laptop, in situations where the intenet has not yet reached the target audience. Since the laptop supports USB devices, and also automatically creates a mesh, a single thumbnail drive could provide the content for an entire village. I can imagine a proliferation of thumbnail curriculum that rivals PSP cartridges on NYC subways.
And remember, children have families, and families have communities... What about OLPC after-hours? Educational content for adults? Aids education, malaria prevention, farming techniques, or any of the millenium project objectives.
If this device does make it out as far and wide as everyone hopes, it will also be present in the refugee camps, and around after the next natural disaster strikes. We can/should be developing applications to help in those situations as well, as katrina taught us IT can really help in these horrible situations.
These are some of the ideas I have been thinking about to help transform my faith into a reality. But I am trying to remain cognizant of the fact that throughout human history we have looked to technology expectantly, almost as a savior, necessarily bringing with it freedom, democracy, and equality. How can we be sure that our faith is not a blind faith? That our optimism is well placed, and not naive and giddy?
Sincere and authentic hard work, paved with good intentions might get us pretty far, and besides, what more can we ever hope to achieve?
Organizations should be independently seeking out their own funding sources, for their own projects around the laptop, not relying on OLPC for permission, blessing, or authority.Absolutely!
And, of course, the spirit and tradition of free culture permits and encourages just this. Anyone can get involved. There is no "they", just a "we" that needs to will these changes into existence.With a project like OLPC, it is common to see people come in asking for permission to do stuff (usually not using the term "permission", but there's something like that going on). And in typical free culture style, they are met with indifference. I'm afraid this is very discouraging, but of course there are important reasons for it too; a loose community in this style just doesn't have the time (or maybe more accurately attention) to hold people's hands, to make investments in people that aren't necessarily going to pan out, etc. So we wait for something concrete to emerge, and then praise it then.
And remember, children have families, and families have communities... What about OLPC after-hours? Educational content for adults? Aids education, malaria prevention, farming techniques, or any of the millenium project objectives.The posts that initiated the discussions with Ivan (1 and 2) were actually about relevence. Why would computers as constructivist tools really matter? For a lot of curriculum, I still don't know how to answer that. I like Logo, I think imperative programming in general is a far superior way to teach pre-algebra and algebra over traditional declarative math... but even if that can work it doesn't matter for these audiences. Algebra barely matters in the US (for most people far less than probability and statistics, for instance). Maybe trig is useful.
Anyway, I think it's a big leap to making these things important in these communities. For some subset of children they will be, just like for a subset of children these things are important here. As a programmer I want to build more programmers, just the natural self-obsession everyone has. But realistically programming and similar formal systems aren't going to be the important thing.
But if we ignore all the programming and constructivist learning and whatnot, and just think about content and communication, it's not hard to see how important these computers can be. Educational content for adults perhaps -- but just as much, the children can become a conduit for important information getting to their families. Basic medical information, for instance (and hopefully more than just the purely cautionary/preventative information we are inundated with here, but actual constructive and useful information about diagnosis and causes). And there's all sorts of mundane but important things... price quotes on food markets, employment listings, government services... everything we do here means something there too, our worlds aren't so different. And as mundane as these things are, they are part of a larger network of information and skill which are the basis of any real constructivist learning -- you don't construct knowledge and concepts from the ether, you construct them from the world around you.
I don't know if adults will work directly with the laptops immediately or not. I kind of like the idea of children as intermediaries.
Sincere and authentic hard work, paved with good intentions might get us pretty far, and besides, what more can we ever hope to achieve?Absolutely. There's some "can vs. should" discussions about OLPC. But personally I believe, if the intentions are good and the implementation competent, "can" and "should" are usually the same thing. Because there's lots of people with self-serving intentions that are working hard all the time, so there is no "first do no harm".
I was reading a textbook on international labor policy several years back, and they had a little snippet of an interview with a textile manufacturer in El Salvador. They were very happy with computers and databases, because they allowed them to track union organizers and blacklist them cooperatively in all their factories. All of us involved in technology are helping people do things like that, indirectly but inevitably. And there's a lot of defense contractors using Python, so we are indirectly helping build the instruments of death. That's depressing. We have to push forward, and push forward hard to do the right things with technology, because there's people pushing forward hard to do the wrong things.
# Ian Bicking
Hello,
really thanks you for doing work for OPLC.
I feel very concerned about helping third world countries developping. I myself spent two years in Ivory Coast and had different contact with person immersed in this reality.
Here is what I would attract your attention upon :
On a project such as OPLC I think you really got to relie upon association with a strong experience and reflexion in the domain. I mean Caritas and the like (excuse me for citing religious one but it's the one I know best). For example I feel Unicef alone is not competent enough because too far from the battle field (although their work is important too).
If you won't do, you expose yourself to be deeply deceipt. That would be a shame. For example experience shows that you always have to ask for committment of the receiver for the project to be fruictfull. If you don't ask anything for a computer (maybe small thing, maybe not money), they will end in a parrallel black market, or in the rubish ! You also have to take into account society/cultural aspects countries by countries. eg. Congo is not Ivory Coast...
Personnaly, as a first go, my prefered strategie would be to provide OPLC to as much non-governmental organizations as possible and let them bring projects with it.
Good luck.
(I also hate the devil's advocate role, as I find it intellectual dishonest; self-labelling dishonesty does not excuse dishonesty! Speculating on negative outcomes does not have to take the form of intellectual sniping.)A person pleads "devil's advocate" in order to pose questions he's sincerely concerned about without himself becoming associated with the (perhaps controversial) view they imply. I think it's a worthwhile function.
The following questions are intended seriously, and I ask from a position of total ignorance.
Given the Hole-in-the-Wall experiment, why develop any new software for the laptop? And: if you're to have units "ready for shipment" by the end of 2006 or early 2007, shouldn't you be wrapping it up around now?
I'm referring to this sort of thing:
At first, I made a Hindi interface for the kids, which gave them links for hooking up with Web sites in their own language. I thought it would be a great hit. Guess what they did with it?


Academic Manager
Student
Dashboard
Add a student
Exchange
Dashboard
Add an exchange student
Alma
Dashboard
Add an Alma
Lecturer
Dashboard
Add a Lecturer
Back
Add an Alma
Name
Address
Notes
Email
Phone Number
Submit


Input Sources
Paragraph filler text about what input sources mean, etc etc. How to use this resource, blah blah blah. This will probably be a couple of sentences long, maybe even multiple paragraphs. Yay!
-
Genki I
A little blurb explaining Genki, blah blah blah. It's a great textbook, that you can use to study Japanese with! Yippee! Let's just write enough text so that this wraps a little bit. Wanna see a big long one!!
-
Genki II
A little blurb explaining Genki II, blah blah blah. It's a great textbook, that you can use to study Japanese with! Yippee! Let's just write enough text so that this wraps a little bit. Wanna see a big long one!!


Execute some SQL here, for fun and profit!
Note that this is a very bad vulnerability: it gives anyone direct access to your whole database. This only exists to test that django_prometheus is working.
{% if query %}Your query was:
{{ query }}
Your results were:
{{ rows }}{% endif %}


| Reference | Class List | Member Functions | Typedefs | File List |
This function object wraps a task_func object and binds a priority to it. prio_task_funcs can be compared using the operator < which realises a partial ordering. The wrapped task function is invoked by calling the operator ().
Definition at line 51 of file task_adaptors.hpp.
Public Types | |
| typedef void | result_type |
Public Member Functions | |
| void | operator() (void) const |
| bool | operator< (const prio_task_func &rhs) const |
| prio_task_func (unsigned int const priority, task_func const &function) |
|
|
Indicates the functor's result type.
Definition at line 58 of file task_adaptors.hpp. |
|
|
Constructor.
Definition at line 65 of file task_adaptors.hpp. |
|
|
Executes the task function. Definition at line 73 of file task_adaptors.hpp. |
|
|
Comparison operator which realises a partial ordering based on priorities.
Definition at line 85 of file task_adaptors.hpp. |


About Us
This would be a great place to introduce yourself to your prospective clients. Give your visitors some insight as to what makes you tick. Let them get a feel for you.
Feel free to tell them about what sets you apart from the competition, how long you’ve been working in your trade and so much more. This is an area you can be fun and energetic with your visitors.
You can also include some other ways to contact you in the sidebar. On this page we’ve enabled the sidebar on the right-hand side of the page and populated it with some content via the Page Inspector.
See our work
Don’t forget to check out our portfolio to see some of our latest work, both for clients and ourselves. Want to commission us? We look forward to hearing from you!


The Odyssey, in Greek: Ὀδύσσεια Odýsseia, is one of two major ancient Greek epic poems attributed to Homer. The other poem is The Iliad which is the prequel of the Odyssey. The Odyssey is the second-oldest work of Western literature, while the Iliad is the oldest. Scholars believe the Odyssey was composed near the end of the 8th century BC, somewhere in Ionia, the Greek region of Anatolia. The poem is composed by 24 books. The poem mainly focuses on the Greek hero Odysseus (known as Ulysses in Roman myths), king of Ithaca, and his journey back home after the fall of Troy. It takes Odysseus ten years to go back to Ithaca after the ten-year Trojan War. While He was absent people thought he was dead, and his wife Penelope and son Telemachus must deal with a group of unruly suitors, the Mnesteres (Greek: Μνηστῆρες) or Proci, who compete for Penelope's hand in marriage and take over Ithaca.
The Odyssey continues to be read in the Homeric Greek and translated into modern languages around the world. Many scholars believe the original poem was composed in an oral tradition by an aoidos (epic poet/singer), perhaps a rhapsode (professional performer), and was more intended to be heard than read (a very common thing back then). The Odyssey was written in a poetic dialect of Greek—a mix of Aeolic Greek, Ionic Greek, and other Ancient Greek dialects—and comprises 12,110 lines of dactylic hexameter. The Odyssey has a lost sequel, the Telegony, which was not written by Homer. It was usually attributed in antiquity to Cinaethon of Sparta. Some believe that The Telegony was stolen from Musaeus of Athens (He was a legendary polymath, philosopher, historian, prophet, seer, priest, poet, and musician) by either Eugamon or Eugammon of Cyrene.
The events in the main sequence of the Odyssey take place in the Peloponnese and in what are now called the Ionian Islands. There are difficulties in order to identify Ithaca, the homeland of Odysseus, which may or may not be the same island that is now called Ithakē (Ιθάκη).


Routing is a subset of Events. Routing wraps how event listeners work and designed to resolve request methods and paths. The basic route listener looks like the following.
<?php
cradle()->get('/about/us', function($request, $response) {
//Do something here
});
Which is very similar to how the basic event listener looks like in retrospec.
The two main differences here are instead of using ->on()
, we are using
something called ->get()
and there are two predefined arguments passed called a
$request
and a $response
. First let's take a look at what the ->get()
is
exactly.
There are four common request methods a website deals with and they are the following.
When a page loads for example, that method is called GET
and when you submit
a form the method is usually a POST. So what we need to take into consideration
are a request method and from what URL path the user is requesting that from.
The following shows how we can consider requests which are called routing
methods.
<?php
cradle()->route('GET', '/some/path/', function($request, $response) {
//Do something here
});
This method has three arguments which combines thoughts of an event and
thoughts of a website request into one. The first argument is the request
method. You are free to put any arbitrary name here, but the user will send
up one of a fixed possibility which were discussed above. The second argument
in the ->route()
method is called the request path. to simplify, this is
the folder request a user makes for example, if a user loaded
http://google.com/about, /about
would be the
path name. The last argument just like events is called the route handler.
When it comes to request methods, mentioned before, the routing object has
predefined methods that acknowledge this commonality. The following all of
which wraps the ->route()
method for your convenience.
<?php
cradle()
->get('/some/path/', function($request, $response) {})
->post('/some/path/', function($request, $response) {})
->put('/some/path/', function($request, $response) {})
->delete('/some/path/', function($request, $response) {});
If you wanted listen to all request methods in one go you can do so like this.
<?php
cradle()->all('/some/path/', function($request, $response) {});
With paths, they can also be expressed with wildcards by adding a *
as in
the following.
<?php
cradle()->get('/some/*/stuff', function($request, $response) {});
When the request path is /some/good/stuff
, the above handler will be
called, like wise with /some/bad/stuff
, however /some/stuff
will not fire
the above handler.
To take on an N amount of wildcards you can add *
as in the following.
<?php
cradle()->get('/some/**/stuff', function($request, $response) {});
When the request path is /some/good/stuff
, the above handler will be
called, like wise with /some/even/better/stuff
, however /some/stuff
will
not fire the above handler. If you wanted a route handler to handle all
requests that deal with all /article requests for example, you can do so
like this.
<?php
cradle()->all('/article/**', function($request, $response) {});
Or like this.
<?php
cradle()->all('**', function($request, $response) {});
You can also use binding in routing if you care about the name of the dynamic paths being passed. The following shows how this can be done.
<?php
cradle()->get('/some/:name/stuff', function($request, $response) {
echo $request->getStage('name');
});
Much like events, routing can be expressed as a function or an include like the following.
<?php
cradle()->get('/some/path', include('/some/event/handler'));
Much like flows, routing can also call on class methods like the following.
<?php
cradle()->get('/some/path', 'Controller@action');
cradle()->post('/some/path', 'Controller::action');
cradle()->get(
'/some/path',
'Another Event',
include('/another/event.php'),
'Controller@action',
'Controller::action',
...$moreActions
);
$request
and $response
are objects that are usually passed to the
callback. Documentation about requests can be found here
and responses can be found here.
Request comes with a property by default is populated with $_GET
, $_POST
and URL parameters which is called stage. Staging data is used to prepare data
that will be eventually processed (like before inserting into a database).
Accessing data can be achieved like $request->getStage()
. Stage is the most
used property in the request because it is the aggregated request data, prevents
the need to manipulate the original post and get properties and allows
prepared data to be passed to other routes and events.
Response comes with a property used to aggregate data to be either sent off to
the output or to bind with a template engine called results which can be set
like $response->setResults('foo', 'bar')
. If there is no content set in the
response, by default a JSON object will be returned in its place. JSON data
can be manipulated like the following.
$response->setError(true, 'Something happened');
$response->addValidation('profile_id', 'Invalid ID');
$response->setResults('foo', 'bar');
If the above code was executed a similar JSON output would look like the following.
{
"error": false,
"message": "Something happened",
"validation": {
"post_title": "Invalid ID"
},
"results": {
"foo": "bar"
}
}
If your routing with flows gets too large in one file, you can optionally split up those routes in mini app files. In a new file, the following is possible.
<?php
use Cradle\Framework\App;
use Cradle\Framework\Flow;
$app = App::i()
->get('/search', 'Profile Search Page')
->get('/detail/:id', 'Profile Detail Page');
return cradle()->app('/profile', $app);
Mini apps, in the above example match /profile/search
to
'Profile Search Page'
. Mini apps are just like the global cradle()
but t
here are a few things that need to be understood about them.
all
- Adds routing middleware for all methods
cradle()->all('/foo/bar', function($request, $response) {
//Do something
});
cradle()->all(
'/foo/bar',
function($request, $response) {
//Do something
},
function($request, $response) {
//Do something more
},
'Some Event',
'Some@method',
'Some::method',
'Some://Event'
//...
);
delete
- Adds routing middleware for DELETE method
cradle()->delete('/foo/bar', function($request, $response) {
//Do something
});
cradle()->delete(
'/foo/bar',
function($request, $response) {
//Do something
},
function($request, $response) {
//Do something more
},
'Some Event',
'Some@method',
'Some::method',
'Some://Event'
//...
);
get
- Adds routing middleware for GET method
cradle()->get('/foo/bar', function($request, $response) {
//Do something
});
cradle()->get(
'/foo/bar',
function($request, $response) {
//Do something
},
function($request, $response) {
//Do something more
},
'Some Event',
'Some@method',
'Some::method',
'Some://Event'
//...
);
post
- Adds routing middleware for POST method
cradle()->post('/foo/bar', function($request, $response) {
//Do something
});
cradle()->post(
'/foo/bar',
function($request, $response) {
//Do something
},
function($request, $response) {
//Do something more
},
'Some Event',
'Some@method',
'Some::method',
'Some://Event'
//...
);
put
- Adds routing middleware for PUT method
cradle()->put('/foo/bar', function($request, $response) {
//Do something
});
cradle()->put(
'/foo/bar',
function($request, $response) {
//Do something
},
function($request, $response) {
//Do something more
},
'Some Event',
'Some@method',
'Some::method',
'Some://Event'
//...
);
setRouter
- Allows for a custom router to be used
| Parameters | |
|---|---|
Cradle\Http\RouterInterface |
The router interface (new Cradle\Http\Router ) |
cradle()->setRouter(new Cradle\Http\Router);
getRouter
- Returns a Router object if none was set, it will auto create one
cradle()->getRouter();


@(page: String)
@Main(page) {
Results
| CRN |
Course |
Title |
Department |
Gen Ed./Focus |
Instructor |
Location |
Time |
|
| 84935 |
ICS 111 |
Intro to Computer Science I |
ICS |
|
Ravi Narayan |
POST 127, POST 319 |
M 0530-0800p, W 0530-0645p |
| 84095 |
ICS 141 |
Discrete Math for CS I |
ICS |
|
Kazuo Sugihara |
BIL 150, MSB 114 |
TR 0130-0245p, F 1200-0115p |
|
| 84494 |
ICS 212 |
Program Structure |
ICS |
|
Julia Patriarche |
TBA |
TBA |
|
My Courses
| CRN |
Course |
Title |
Department |
Gen Ed./Focus |
Instructor |
Location |
Time |
|
| 84935 |
ICS 111 |
Intro to Computer Science I |
ICS |
|
Ravi Narayan |
POST 127, POST 319 |
M 0530-0800p, W 0530-0645p |
|
}


Example Moneysocket Browser Apps:
Test App
Wallet App
Buyer App
Seller App
Beacon Encoder/Decoder App


With Filoni in charge of The Mandalorian... we had to go back and rewatch to have all the freshness
it PoW mines with 1 core
but it stops staking
cant do both in one daemon
kmdkrazy06-Dec-19 04:55 AM
whats better?
daemonfox06-Dec-19 04:55 AM
staking
but if you have a equihash ASIC mining is worthwhile
CG has a pool for LABS
speaking of... hey @ComputerGenie 👴👴👴 hows Kevin doing lmao?
maybe he wants to play with this comp Sunday hahahahaha!
kmdkrazy06-Dec-19 05:03 AM
ht.267201 PoW diff violation PoSperc.50 vs goalperc.51 --- FEK!!!!
daemonfox06-Dec-19 05:23 AM
ok staking node is building
kmdkrazy06-Dec-19 05:33 AM
using -zapwallet
something is getting stuck
daemonfox06-Dec-19 05:37 AM
sweet no build errors here
kmdkrazy06-Dec-19 05:38 AM
what sis you build?
komodod
daemonfox06-Dec-19 05:39 AM
yes
kmdkrazy06-Dec-19 05:40 AM
the one from kmdlabs right
daemonfox06-Dec-19 05:40 AM
Traceback (most recent call last):
File "./entercomp.py", line 3, in <module>
import stakerlib
File "/home/daemonfox/pos64staker/stakerlib.py", line 8, in <module>
import base58
ImportError: No module named 'base58'
kmdkrazy06-Dec-19 05:41 AM
goto py
you have python3 ??
pip install base58
daemonfox06-Dec-19 05:43 AM
was missing python pip
kmdkrazy06-Dec-19 05:43 AM
update python needd to be in the instructions
daemonfox06-Dec-19 05:43 AM
Traceback (most recent call last):
File "/usr/bin/pip", line 9, in <module>
from pip import main
ImportError: cannot import name main
updating apt... thought i already did that but no... lots of updates
kmdkrazy06-Dec-19 05:45 AM
-zapwallettxes worked AGIAN!
daemonfox06-Dec-19 05:46 AM
lol good to hear
kmdkrazy06-Dec-19 05:46 AM
nope --- i lied
[LABS:267201] staked block 0542e64f44449d35a642ac802f13a8cd1138ffd39bc6432efed87dba7a444312
[LABS:267202] Reset ram staker after mining a block!
same block
me and some dudes got our own LABS
we dont need your chain
daemonfox06-Dec-19 05:58 AM
pip 19.3.1 from /home/daemonfox/.local/lib/python2.7/site-packages/pip (python 2.7)
im not sure how to clean this up...
but the error seems to be PATH related cuz pip can be installed incorrectly
The Python team has released its latest version Python 3.8 for general use. You can download the latest stable version Python 3.8 series and install it on your system. This article will help you to install Python 3.8.0 on Ubuntu, Debian, and LinuxMint operating system. You ca...
i didnt feel like fixing the old versions or installation --- I said fek it
sudo apt-get install python3-pip
and that
pip3
pip3 install
Now you have a functional Python 3.8 setup on your Ubuntu 18.04 machine. If you want to install something system-wide, make sure to use pip3.
pip3 install base58
daemonfox06-Dec-19 06:18 AM
sudo make altinstall
this is the line
that makes the difference
make altinstall is used to prevent replacing the default python binary file /usr/bin/python.
kmdkrazy06-Dec-19 06:19 AM
---- welllll i didnt GAF what fixed it
daemonfox06-Dec-19 06:19 AM
doing it the regular or apt way makes the wrong wrapper call to python
ImportError: No module named 'secrets'
same crap?
kmdkrazy06-Dec-19 06:23 AM
let me think
daemonfox06-Dec-19 06:23 AM
ImportError: No module named 'OpenSSL'
kmdkrazy06-Dec-19 06:23 AM
uninstall and reinstall your regular python?
i had some of these issues
pip3 --- go back and make sure you instralled ALL dependencies


Introduction
Welcome to the EnayaPay API! You can use our API to access EnayaPay API endpoints.
User Account Management
Register
# With shell, you can just pass the correct header with each request
curl "https://sandbox.enayapay.com/api/v2.1/register/" \
-H "x-api-key: gffdgdfgdfgdfgdfgdgd"
Make sure to replace
gffdgdfgdfgdfgdfgdgd
with your API key.
HTTP Request
POST https://sandbox.enayapay.com/api/v2.1/register/
Description
the use of this endpoint to register new user using phone number as id verification .
Headers
{
"x-api-key": "fddfgdfgdfgdfgdfg"
}
Body
{
"user_phone": "2499++++++++",
"user_name": "doctor",
"user_password": "calicofdhfdsfsd"
}
Parameters Description
| Parameter | Default | Description | Type |
|---|---|---|---|
| user_phone | required | user phone number | String |
| user_name | required | userName of user | String |
| user_password | required | user password | String |
Response
| StatusCode | Response Data | Description |
|---|---|---|
| 201 | None | user created and otp will send in phone number |
| 302 | None | user already registered |
| 406 | {"details" : "your number not valid"} |
phone number of user not valid |
| 400 | { "details": {"user_password": [ "This field is required."]} } |
Bad request occurred when forget parameter |
| 502 | {"details" : "bad getway" } |
bad getway of sms getway |
| 503 | {"details" :"service not available"} |
when service not available |
verify
# With shell, you can just pass the correct header with each request
curl "https://sandbox.enayapay.com/api/v2.1/verify/" \
-H "x-api-key: gffdgdfgdfgdfgdfgdgd"
Make sure to replace
gffdgdfgdfgdfgdfgdgd
with your API key.
HTTP Request
POST https://sandbox.enayapay.com/api/v2.1/verify/
Description
the use of this endpoint to verification user phone number that he used
Headers
{
"x-api-key": "fddfgdfgdfgdfgdfg"
}
Body
{
"user_phone": "2499++++++++",
"user_otp": "454345"
}
Parameters Description
| Parameter | Default | Description | Type |
|---|---|---|---|
| user_phone | required | user phone number | String |
| user_otp | required | otp of user | String |
Response
| StatusCode | Response Data | Description |
|---|---|---|
| 200 | {"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6IjU3NTMwNyIsImV4cGlyeSI6IjIwMjEtMTEtMTMifQ.2uU8eOnw8biYxH55EblrTHOz5nM4rcP1kiIa7S46mFs","user_name": "doctor"} |
user verified |
| 203 | None | wrong otp |
| 400 | { "details": {"user_otp": ["This field is required."]} } |
Bad request occurred when forget parameter |
| 401 | None | your api key not valid |
| 404 | {"details": "user not registered"} |
user not register |
| 503 | {"details" :"service not available"} |
when service not available |
login
# With shell, you can just pass the correct header with each request
curl "https://sandbox.enayapay.com/api/v2.1/login/" \
-H "x-api-key: gffdgdfgdfgdfgdfgdgd"
Make sure to replace
gffdgdfgdfgdfgdfgdgd
with your API key.
HTTP Request
POST https://sandbox.enayapay.com/api/v2.1/login/
Description
this endpoint use to access user account using password
Headers
{
"x-api-key": "fddfgdfgdfgdfgdfg"
}
Body
{
"user_phone": "2499++++++++",
"user_password": "dfdfsdfdsfs"
}
Parameters Description
| Parameter | Default | Description | Type |
|---|---|---|---|
| user_phone | required | user phone number | String |
| user_password | required | password of user | String |
Response
| StatusCode | Response Data | Description |
|---|---|---|
| 200 | {"user_name": "doctor","status": "active"} |
user authorized |
| 203 | None | wrong password |
| 400 | { "details": {"user_password": ["This field is required."]} } |
Bad request occurred when forget parameter |
| 401 | None | your api key not valid |
| 404 | {"details": "user not registered"} |
user not register |
| 503 | {"details" :"service not available"} |
when service not available |
rest password
# With shell, you can just pass the correct header with each request
curl "https://sandbox.enayapay.com/api/v2.1/rest/password/" \
-H "x-api-key: gffdgdfgdfgdfgdfgdgd , token: ffdfdsfsdfds "
Make sure to replace
gffdgdfgdfgdfgdfgdgd
with your API key and Token.
HTTP Request
POST https://sandbox.enayapay.com/api/v2.1/rest/password/
Description
this endpoint use to rest user password when he forget
Headers
{
"x-api-key": "fddfgdfgdfgdfgdfg",
"token": "fsfsfkwoieriworiewriweiriwerieworioweir"
}
Body
{
"user_phone": "2499++++++++",
"user_password": "dfdfsdfdsfs"
}
Parameters Description
| Parameter | Default | Description | Type |
|---|---|---|---|
| user_phone | required | user phone number | String |
| user_password | required | password of user | String |
Response
| StatusCode | Response Data | Description |
|---|---|---|
| 200 | {"user_name": "doctor","status": "active"} |
user rest his password successful |
| 203 | None | not valid token |
| 400 | { "details": {"user_password": ["This field is required."]} } |
Bad request occurred when forget parameter |
| 401 | None | your api key not valid |
| 404 | {"details": "user not registered"} |
user not register |
| 503 | {"details" :"service not available"} |
when service not available |
change password
# With shell, you can just pass the correct header with each request
curl "https://sandbox.enayapay.com/api/v2.1/change/password/" \
-H "x-api-key: gffdgdfgdfgdfgdfgdgd , token: ffdfdsfsdfds "
Make sure to replace
gffdgdfgdfgdfgdfgdgd
with your API key and Token.
HTTP Request
POST https://sandbox.enayapay.com/api/v2.1/change/password/
Description
this endpoint use to change user password that he used to access apllication .
Headers
{
"x-api-key": "fddfgdfgdfgdfgdfg",
"token": "fsfsfkwoieriworiewriweiriwerieworiowe"
}
Body
{
"current_password": "gfgfdgdfg",
"new_password": "dfdfsdfdsfs"
}
Parameters Description
| Parameter | Default | Description | Type |
|---|---|---|---|
| current_password | required | old password that user need to change | String |
| new_password | required | new_password that user need to change to it | String |
Response
| StatusCode | Response Data | Description |
|---|---|---|
| 200 | {"details": "password updated successful"} |
user changed his password successfully |
| 203 | {"details": "wrong current password"} |
invalid old password |
| 400 | { "details": {"new_password": ["This field is required."]} } |
Bad request occurred when forget parameter |
| 401 | None | your api key not valid |
| 404 | {"details": "user not registered"} |
user not register |
| 503 | {"details" :"service not available"} |
when service not available |
Cards
add card
# With shell, you can just pass the correct header with each request
curl "https://sandbox.enayapay.com/api/v2.1/cards/" \
-H "x-api-key: gffdgdfgdfgdfgdfgdgd , token: ffdfdsfsdfds "
Make sure to replace
gffdgdfgdfgdfgdfgdgd
with your API key and Token.
HTTP Request
POST https://sandbox.enayapay.com/api/v2.1/cards/
Description
this endpoint use to add new card to your account
Headers
{
"x-api-key": "fddfgdfgdfgdfgdfg",
"token": "fsfsfkwoieriworiewriweiriwerieworiowe"
}
Body
{
"pan":"454567894567988",
"label":"bakheet",
"expiration_date":"0824",
"default":1
}
Parameters Description
| Parameter | Default | Description | Type |
|---|---|---|---|
| pan | required | number of card that user want to add | String |
| label | required | display name of card | String |
| expiration_date | required | expiration date of card | String |
| default | required | to set card as default in use | string |
Response
| StatusCode | Response Data | Description |
|---|---|---|
| 201 | {"id" :1} |
card added successfully |
| 400 | { "details": {"pan": ["This field is required."]} } |
Bad request occurred when forget parameter |
| 302 | None | card already added |
| 401 | None | your api key not valid |
| 404 | {"details": " user not registered"} |
user not register |
| 406 | {"details": "unknown card number"} |
user card number not valid |
| 503 | {"details" :"service unvailable for now"} |
service disable for user |
get cards
# With shell, you can just pass the correct header with each request
curl "https://sandbox.enayapay.com/api/v2.1/cards/" \
-H "x-api-key: gffdgdfgdfgdfgdfgdgd , token: ffdfdsfsdfds "
Make sure to replace
gffdgdfgdfgdfgdfgdgd
with your API key and Token.
HTTP Request
GET https://sandbox.enayapay.com/api/v2.1/cards/
Description
this endpoint use views all cards that user assgin to his account
Headers
{
"x-api-key": "fddfgdfgdfgdfgdfg",
"token": "fsfsfkwoieriworiewriweiriwerieworiowe"
}
Response
| StatusCode | Response Data | Description |
|---|---|---|
| 200 | [{"id": 1,"card_pan": "454567894567988","card_expiry": "0824","card_label": "bakheet","card_type": "International","card_image": "Screenshot_from_2021-07-08_14-33-58.png","default": 1}] |
all cards that user assign to his account |
| 401 | None | your api key not valid |
| 404 | {"details": " user not registered"} |
user not register |
| 503 | {"details" :"service unvailable for now"} |
service disable for user |
get card
# With shell, you can just pass the correct header with each request
curl "https://sandbox.enayapay.com/api/v2.1/card/1/" \
-H "x-api-key: gffdgdfgdfgdfgdfgdgd , token: ffdfdsfsdfds "
Make sure to replace
gffdgdfgdfgdfgdfgdgd
with your API key and Token.
HTTP Request
GET https://sandbox.enayapay.com/api/v2.1/card/1/
Description
this endpoint use view one card base on card id that user assgin to his account
Headers
{
"x-api-key": "fddfgdfgdfgdfgdfg",
"token": "fsfsfkwoieriworiewriweiriwerieworiowe"
}
Response
| StatusCode | Response Data | Description |
|---|---|---|
| 200 | [{"id": 1,"card_pan": "454567894567988","card_expiry": "0824","card_label": "bakheet","card_type": "International","card_image": "Screenshot_from_2021-07-08_14-33-58.png","default": 1}] |
view one card that user assign to his account |
| 401 | None | your api key not valid |
| 404 | {"details": " user not registered"} |
user not register |
| 503 | {"details" :"service unvailable for now"} |
service disable for user |
delete card
# With shell, you can just pass the correct header with each request
curl "https://sandbox.enayapay.com/api/v2.1/card/1/" \
-H "x-api-key: gffdgdfgdfgdfgdfgdgd , token: ffdfdsfsdfds "
Make sure to replace
gffdgdfgdfgdfgdfgdgd
with your API key and Token.
HTTP Request
DELETE https://sandbox.enayapay.com/api/v2.1/card/1/
Description
this endpoint use remove card base on card id that user assgin to his account
Headers
{
"x-api-key": "fddfgdfgdfgdfgdfg",
"token": "fsfsfkwoieriworiewriweiriwerieworiowe"
}
Response
| StatusCode | Response Data | Description |
|---|---|---|
| 204 | {"details":"card has been deleted successfully"} |
view one card that user assign to his account |
| 401 | None | your api key not valid |
| 404 | {"details": " user not registered"} |
user not register |
balance inquiry
# With shell, you can just pass the correct header with each request
curl "https://sandbox.enayapay.com/api/v2.1/balance/inquiry/" \
-H "x-api-key: gffdgdfgdfgdfgdfgdgd , token: ffdfdsfsdfds "
Make sure to replace
gffdgdfgdfgdfgdfgdgd
with your API key and Token.
HTTP Request
POST https://sandbox.enayapay.com/api/v2.1/balance/inquiry/
Description
this endpoint use to provide information on the customer account balance
Headers
{
"x-api-key": "fddfgdfgdfgdfgdfg",
"token": "fsfsfkwoieriworiewriweiriwerieworiowe"
}
Body
{
"pan":"45456789456798893",
"ipin":"rtewrrtertretretrtrwtwrt",
"uuid":"fdfregregergerlkfjerfklerjfkgerjgjre",
"expiration_date":"0824"
}
Parameters Description
| Parameter | Default | Description | Type |
|---|---|---|---|
| pan | required | number of card that user want to known its balance | String |
| ipin | required | credential of customer | String |
| expiration_date | required | expiration date of card | String |
| uuid | required | string |
Response
| StatusCode | Response Data | Description |
|---|---|---|
| 200 | {"response_code": 0,"balance": 400,"response_status": "Successful","uuid": "fdfregregergerlkfjerfklerjfkgerjgjre"} |
account user informations |
| 400 | { "details": {"pan": ["This field is required."]} } |
Bad request occurred when forget parameter |
| 401 | None | your api key not valid |
| 406 | {"response_code": 696,"response_message": "SYSTEM_ERROR"} |
service provider errors with code |
| 502 | {"details" :"bad getway"} |
when service provider down |
Telecoms
Local
Topup
# With shell, you can just pass the correct header with each request
curl "https://sandbox.enayapay.com/api/v2.1/telecom/110010001/topup/" \
-H "x-api-key: gffdgdfgdfgdfgdfgdgd , token: ffdfdsfsdfds "
Make sure to replace
gffdgdfgdfgdfgdfgdgd
with your API key and Token.
HTTP Request
POST https://sandbox.enayapay.com/api/v2.1/telecom/110010001/topup/
Description
this endpoint use to provide topup to customer base on payeeid
Headers
{
"x-api-key": "fddfgdfgdfgdfgdfg",
"token": "fsfsfkwoieriworiewriweiriwerieworiowe"
}
Body
{
"pan":"43443455656653465",
"ipin":"reretertrterty5rt45",
"expiration_date":"0824",
"phone_no":"0905450785",
"amount": 300,
"uuid":"rerrwerwerwerwerwerwrweRWrwrwr",
"platform":"web"
}
Parameters Description
| Parameter | Default | Description | Type |
|---|---|---|---|
| pan | required | number of card that user want to py topup by it | String |
| ipin | required | credential of customer | String |
| expiration_date | required | expiration date of card | String |
| amount | required | amount of topup that customer need to pay | Float |
| phone_no | required | phone number want to charge it | String |
| uuid | required | the key used to encrypt ipin | string |
| platform | required | platform that customer used to charge phone number | String |
Response
| StatusCode | Response Data | Description |
|---|---|---|
| 200 | {"pan": "43443455656653465","acq_tran_fee": 0,"dynamic_fees": 0,"issuer_tran_fee": 0,"payment_info": "MPHONE=<PHONE_NUMBER>785","response_message": "Approved","response_status": "Successful","amount": 300,tran_date_time":<PHONE_NUMBER>4,"uuid": "rerrwerwerwerwerwerwrweRWrwrwr","response_code": 0} |
Transaction done successfully |
| 400 | { "details": {"pan": ["This field is required."]} } |
Bad request occurred when forget parameter |
| 401 | None | your api key not valid |
| 404 | customer not registered | |
| 406 | {"response_code": 696,"response_message": "SYSTEM_ERROR"} |
service provider errors with code |
| 503 | {"details" :"service unavailable"} |
service disable for now |
Inquiry
# With shell, you can just pass the correct header with each request
curl "https://sandbox.enayapay.com/api/v2.1/telecom/1100055511/inquiry/" \
-H "x-api-key: gffdgdfgdfgdfgdfgdgd , token: ffdfdsfsdfds "
Make sure to replace
gffdgdfgdfgdfgdfgdgd
with your API key and Token.
HTTP Request
POST https://sandbox.enayapay.com/api/v2.1/telecom/1100055511/inquiry/
Description
this endpoint use to provide information of cutomer account invoice
Headers
{
"x-api-key": "fddfgdfgdfgdfgdfg",
"token": "fsfsfkwoieriworiewriweiriwerieworiowe"
}
Body
{
"phone_no":"0905450785"
}
Parameters Description
| Parameter | Default | Description | Type |
|---|
phone_no | required | phone number that customer want to known invoice for it | String
Response
| StatusCode | Response Data | Description |
|---|---|---|
| 200 | {"total_amount": 400,"contract_number":<PHONE_NUMBER>5,"acq_tran_fee": 0,"dynamic_fees": 0,"issuer_tran_fee": 0,"tran_date_time": 65475475} |
Transaction done successfully |
| 400 | { "details": {"phone_no": ["This field is required."]} } |
Bad request occurred when forget parameter |
| 401 | None | your api key not valid |
| 404 | customer not registered | |
| 406 | {"response_code": 696,"response_message": "SYSTEM_ERROR"} |
service provider errors with code |
| 503 | {"details" :"service unavailable"} |
service disable for now |
Bill Payment
# With shell, you can just pass the correct header with each request
curl "https://sandbox.enayapay.com/api/v2.1/telecom/110010001/topup/" \
-H "x-api-key: gffdgdfgdfgdfgdfgdgd , token: ffdfdsfsdfds "
Make sure to replace
gffdgdfgdfgdfgdfgdgd
with your API key and Token.
HTTP Request
POST https://sandbox.enayapay.com/api/v2.1/telecom/110010001/topup/
Description
this endpoint use by customers bill they invoices
Headers
{
"x-api-key": "fddfgdfgdfgdfgdfg",
"token": "fsfsfkwoieriworiewriweiriwerieworiowe"
}
Body
{
"pan":"43443455656653465",
"ipin":"reretertrterty5rt45",
"expiration_date":"0824",
"phone_no":"0905450785",
"amount": 300,
"uuid":"rerrwerwerwerwerwerwrweRWrwrwr",
"platform":"web"
}
Parameters Description
| Parameter | Default | Description | Type |
|---|---|---|---|
| pan | required | number of card that user want to py topup by it | String |
| ipin | required | credential of customer | String |
| expiration_date | required | expiration date of card | String |
| amount | required | amount of topup that customer need to pay | Float |
| phone_no | required | phone number want to charge it | String |
| uuid | required | the key used to encrypt ipin | string |
| platform | required | platform that customer used to charge phone number | String |
Response
| StatusCode | Response Data | Description |
|---|---|---|
| 200 | {"pan": "43443455656653465","acq_tran_fee": 0,"dynamic_fees": 0,"issuer_tran_fee": 0,"payment_info": "MPHONE=<PHONE_NUMBER>785","response_message": "Approved","response_status": "Successful","amount": 300,tran_date_time":<PHONE_NUMBER>4,"uuid": "rerrwerwerwerwerwerwrweRWrwrwr","response_code": 0} |
Transaction done successfully |
| 400 | { "details": {"pan": ["This field is required."]} } |
Bad request occurred when forget parameter |
| 401 | None | your api key not valid |
| 404 | customer not registered | |
| 406 | {"response_code": 696,"response_message": "SYSTEM_ERROR"} |
service provider errors with code |
| 503 | {"details" :"service unavailable"} |
service disable for now |
Telecoms Create Order
# With shell, you can just pass the correct header with each request
curl "https://sandbox.enayapay.com/api/v2.1/paypal/telecom/110011001/topup/" \
-H "x-api-key: gffdgdfgdfgdfgdfgdgd , token: ffdfdsfsdfds "
Make sure to replace
gffdgdfgdfgdfgdfgdgd
with your API key and Token.
HTTP Request
POST https://sandbox.enayapay.com/api/v2.1/paypal/telecom/110011001/topup/
Description
this endpoint use to create order to pay topup to customer base on payeeid with paypal
Headers
{
"x-api-key": "fddfgdfgdfgdfgdfg",
"token": "fsfsfkwoieriworiewriweiriwerieworiowe"
}
Body
{
"phone_no":"0905450785",
"amount": 300,
"platform":"web"
}
Parameters Description
| Parameter | Default | Description | Type |
|---|---|---|---|
| amount | required | amount of topup that customer need to pay | Float |
| phone_no | required | phone number want to charge it | String |
| platform | required | platform that customer used to charge phone number | String |
Response
| StatusCode | Response Data | Description |
|---|---|---|
| 201 | {"approval_url": "https://www.paypal.com/checkoutnow?token=45R87131522395454","order_id": "45R87131522395454"} |
order created successfully |
| 400 | { "details": {"amount": ["This field is required."]} } |
Bad request occurred when forget parameter |
| 401 | {"details": "your token or api key not in header"} |
your api key not valid or token |
| 402 | {"details": "your amount less than 1$"} |
your amount less than 1$ |
| 503 | {"details" :"service unavailable"} |
service disable for now |
Telecoms approve Order
# With shell, you can just pass the correct header with each request
curl "https://sandbox.enayapay.com/api/v2.1/paypal/telecom/110011001/topup/" \
-H "x-api-key: gffdgdfgdfgdfgdfgdgd , token: ffdfdsfsdfds "
Make sure to replace
gffdgdfgdfgdfgdfgdgd
with your API key and Token.
HTTP Request
POST https://sandbox.enayapay.com/api/v2.1/paypal/telecom/110011001/topup/
Description
this endpoint use to provide topup to customer base on payeeid with paypal
Headers
{
"x-api-key": "fddfgdfgdfgdfgdfg",
"token": "fsfsfkwoieriworiewriweiriwerieworiowe"
}
Body
{
"approve_order_id":"45R87131522395454"
}
Parameters Description
| Parameter | Default | Description | Type |
|---|---|---|---|
| 45R87131522395454 | required | order that used in payment process in paypal | String |
Response
| StatusCode | Response Data | Description |
|---|---|---|
| 200 | {"acq_tran_fee": 0.0,"dynamic_fees": 0.0,"issuer_tran_fee": 0.0,"payment_info": "MPHONE=0905450785","response_message": "Approved","response_status": response_status,"amount_sdg": 300,"amount_usd": 1.5,"service_type": Zain Topup,"tran_date_time": 344234324,"uuid": "asdadafafsaf334eadasdsadadasdq3","response_code": 0} |
transaction done successfully |
| 400 | { "details": {"approve_order_id": ["This field is required."]} } |
Bad request occurred when forget parameter |
| 401 | {"details": "your token or api key not in header"} |
your api key not valid or token |
| 406 | {"response_code": 696,"response_message": "SYSTEM_ERROR"} |
service provider errors with code |
| 422 | {"details": "your order id not valid"} |
user used not valid order |
| 503 | {"details" :"service unavailable"} |
service disable for now |
Electricity
Electricity Local
# With shell, you can just pass the correct header with each request
curl "https://sandbox.enayapay.com/api/v2.1/electricity/" \
-H "x-api-key: gffdgdfgdfgdfgdfgdgd , token: ffdfdsfsdfds "
Make sure to replace
gffdgdfgdfgdfgdfgdgd
with your API key and Token.
HTTP Request
POST https://sandbox.enayapay.com/api/v2.1/electricity/
Description
this endpoint use by customers to charge they meters
Headers
{
"x-api-key": "fddfgdfgdfgdfgdfg",
"token": "fsfsfkwoieriworiewriweiriwerieworiowe"
}
Body
{
"pan":"43443455656653465",
"ipin":"reretertrterty5rt45",
"expiration_date":"0824",
"meter_no":"0905450785",
"amount": 300,
"uuid":"rerrwerwerwerwerwerwrweRWrwrwr",
"platform":"web"
}
Parameters Description
| Parameter | Default | Description | Type |
|---|---|---|---|
| pan | required | number of card that user want to py topup by it | String |
| ipin | required | credential of customer | String |
| expiration_date | required | expiration date of card | String |
| amount | required | amount of topup that customer need to pay | Float |
| meter_no | required | meter number want to charge it | String |
| uuid | required | the key used to encrypt ipin | string |
| platform | required | platform that customer used to charge phone number | String |
Response
| StatusCode | Response Data | Description |
|---|---|---|
| 200 | {"acq_tran_fee": 0,"dynamic_fees": 0,"issuer_tran_fee": 0,"pan": "43443455656653465","payment_info": "METER=024354364645","response_message": "Approved","response_status": "Successful", "amount": 300, "tranDateTime":<PHONE_NUMBER>432, "uuid": "rerrwerwerwerwerwerwrweRWrwrwr", "response_code": 0, "account_no":<PHONE_NUMBER>, "customer_name": "bakheet", "meter_fees": 1,"meter_number": "024354364645", "net_amount": 0, "operator_message": "Credit Purchase", "token": "47310897576729505616","units_in_kwh": 34, "water_fees": 1} |
Transaction done successfully |
| 400 | { "details": {"pan": ["This field is required."]} } |
Bad request occurred when forget parameter |
| 401 | None | your api key not valid |
| 404 | customer not registered | |
| 406 | {"response_code": 696,"response_message": "SYSTEM_ERROR"} |
service provider errors with code |
| 503 | {"details" :"service unavailable"} |
service disable for now |
Electricity Create Order
# With shell, you can just pass the correct header with each request
curl "https://sandbox.enayapay.com/api/v2.1/paypal/electricity/" \
-H "x-api-key: gffdgdfgdfgdfgdfgdgd , token: ffdfdsfsdfds "
Make sure to replace
gffdgdfgdfgdfgdfgdgd
with your API key and Token.
HTTP Request
POST https://sandbox.enayapay.com/api/v2.1/paypal/electricity/
Description
this endpoint use to create order to pay Electricity with paypal
Headers
{
"x-api-key": "fddfgdfgdfgdfgdfg",
"token": "fsfsfkwoieriworiewriweiriwerieworiowe"
}
Body
{
"meter_no":"0905450785",
"amount": 300,
"platform":"web"
}
Parameters Description
| Parameter | Default | Description | Type |
|---|---|---|---|
| amount | required | amount of topup that customer need to pay | Float |
| meter_no | required | meter number want to charge it | String |
| platform | required | platform that customer used to charge meter number | String |
Response
| StatusCode | Response Data | Description |
|---|---|---|
| 201 | {"approval_url": "https://www.paypal.com/checkoutnow?token=45R87131522395454","order_id": "45R87131522395454"} |
order created successfully |
| 400 | { "details": {"amount": ["This field is required."]} } |
Bad request occurred when forget parameter |
| 401 | {"details": "your token or api key not in header"} |
your api key not valid or token |
| 402 | {"details": "your amount less than 1$"} |
your amount less than 1$ |
| 503 | {"details" :"service unavailable"} |
service disable for now |
Electricity approve Order
# With shell, you can just pass the correct header with each request
curl "https://sandbox.enayapay.com/api/v2.1/electricity/approve/" \
-H "x-api-key: gffdgdfgdfgdfgdfgdgd , token: ffdfdsfsdfds "
Make sure to replace
gffdgdfgdfgdfgdfgdgd
with your API key and Token.
HTTP Request
POST https://sandbox.enayapay.com/api/v2.1/electricity/approve/
Description
this endpoint use to approve order that customer created
Headers
{
"x-api-key": "fddfgdfgdfgdfgdfg",
"token": "fsfsfkwoieriworiewriweiriwerieworiowe"
}
Body
{
"approve_order_id":"45R87131522395454"
}
Parameters Description
| Parameter | Default | Description | Type |
|---|---|---|---|
| 45R87131522395454 | required | order that used in payment process in paypal | String |
Response
| StatusCode | Response Data | Description |
|---|---|---|
| 200 | { "acq_tran_fee": 0.0,"dynamic_fees": 0.0,"issuer_tran_fee": 0.0,"payment_info": "METER_NO=<PHONE_NUMBER>","response_message": "Approved","response_status": "Successful","amount_sdg": 500,"amount_usd": 1,tran_date_time":<PHONE_NUMBER>4234,"uuid": "fdfsdfsdfsdsaedeseadasdasdas","response_code": 0,"account_no": 34433,"customer_name": "bakheet","meter_fees": 0.0,"meter_number":<PHONE_NUMBER>,"net_amount": 4.0,"operator_message": "pay","token": "45345345353453532532532","units_in_kwh": 45.0,"water_fees": 0.0} |
transaction done successfully |
| 400 | { "details": {"approve_order_id": ["This field is required."]} } |
Bad request occurred when forget parameter |
| 401 | {"details": "your token or api key not in header"} |
your api key not valid or token |
| 406 | {"response_code": 696,"response_message": "SYSTEM_ERROR"} |
service provider errors with code |
| 422 | {"details": "your order id not valid"} |
user used not valid order |
| 503 | {"details" :"service unavailable"} |
service disable for now |
Transfer
Cashout Create Order
# With shell, you can just pass the correct header with each request
curl "https://sandbox.enayapay.com/api/v2.1/paypal/cashout/" \
-H "x-api-key: gffdgdfgdfgdfgdfgdgd , token: ffdfdsfsdfds "
Make sure to replace
gffdgdfgdfgdfgdfgdgd
with your API key and Token.
HTTP Request
POST https://sandbox.enayapay.com/api/v2.1/paypal/cashout/
Description
this endpoint use to create order to send money with paypal
Headers
{
"x-api-key": "fddfgdfgdfgdfgdfg",
"token": "fsfsfkwoieriworiewriweiriwerieworiowe"
}
Body
{
"receiver_first_name":"bakheet",
"receiver_last_name" :"alsafy",
"receiver_phone_number":"249905450785",
"card_no":"2424242421424234234",
"transfer_type":"card",
"amount":500,
"platform" :"web"
}
Parameters Description
| Parameter | Default | Description | Type |
|---|---|---|---|
| receiver_first_name | required | first name of receiver | String |
| receiver_last_name | required | last name of receiver | String |
| receiver_phone_number | required | phone number of receiver | String |
| card_no | required | card number of receiver | String |
| transfer_type | required | type of transfer that customer used | String |
| amount | required | amount that customer need to send | Float |
| platform | required | platform that customer used to charge meter number | String |
Response
| StatusCode | Response Data | Description |
|---|---|---|
| 201 | {"approval_url": "https://www.paypal.com/checkoutnow?token=45R87131522395454","order_id": "45R87131522395454"} |
order created successfully |
| 400 | { "details": {"amount": ["This field is required."]} } |
Bad request occurred when forget parameter |
| 401 | {"details": "your token or api key not in header"} |
your api key not valid or token |
| 402 | {"details": "your amount less than 1$"} |
your amount less than 1$ |
| 503 | {"details" :"service unavailable"} |
service disable for now |
cash out approve Order
# With shell, you can just pass the correct header with each request
curl "https://sandbox.enayapay.com/api/v2.1/paypal/cashout/approve/" \
-H "x-api-key: gffdgdfgdfgdfgdfgdgd , token: ffdfdsfsdfds "
Make sure to replace
gffdgdfgdfgdfgdfgdgd
with your API key and Token.
HTTP Request
POST https://sandbox.enayapay.com/api/v2.1/paypal/cashout/approve/
Description
this endpoint use to approve order that customer created
Headers
{
"x-api-key": "fddfgdfgdfgdfgdfg",
"token": "fsfsfkwoieriworiewriweiriwerieworiowe"
}
Body
{
"approve_order_id":"45R87131522395454"
}
Parameters Description
| Parameter | Default | Description | Type |
|---|---|---|---|
| 45R87131522395454 | required | order that used in payment process in paypal | String |
Response
| StatusCode | Response Data | Description |
|---|---|---|
| 200 | {"acq_tran_fee": 0.0,"dynamic_fees": 0.0,"issuer_tran_fee": 0.0,"response_message": "Approved","response_status": "Successful,"amount_sdg": 500,"amount_usd": 1.5,"tran_date_time": 232324341,"uuid": "sdasfsafsfsfs4edesfsefaefae","response_code": 0} |
transaction done successfully |
| 400 | { "details": {"approve_order_id": ["This field is required."]} } |
Bad request occurred when forget parameter |
| 401 | {"details": "your token or api key not in header"} |
your api key not valid or token |
| 406 | {"response_code": 696,"response_message": "SYSTEM_ERROR"} |
service provider errors with code |
| 422 | {"details": "your order id not valid"} |
user used not valid order |
| 503 | {"details" :"service unavailable"} |
service disable for now |
Errors
The EnayaPay API uses the following error codes:
| Error Code | Meaning |
|---|---|
| 400 | Bad Request -- Your request is invalid. |
| 401 | Unauthorized -- Your API key is wrong. |
| 403 | Forbidden -- The kitten requested is hidden for administrators only. |
| 404 | Not Found -- The specified kitten could not be found. |
| 405 | Method Not Allowed -- You tried to access a kitten with an invalid method. |
| 406 | Not Acceptable -- You requested a format that isn't json. |
| 410 | Gone -- The kitten requested has been removed from our servers. |
| 418 | I'm a teapot. |
| 429 | Too Many Requests -- You're requesting too many kittens! Slow down! |
| 500 | Internal Server Error -- We had a problem with our server. Try again later. |
| 503 | Service Unavailable -- We're temporarily offline for maintenance. Please try again later. |


Leaflet is the leading open-source JavaScript library for mobile-friendly interactive maps. Weighing just about 38 KB of JS, it has all the mapping features most developers ever need. Leaflet is designed with simplicity, performance and usability in mind. It works efficiently across all major desktop and mobile platforms, can be extended with lots of plugins, has a beautiful, easy to use and well-documented API and a simple, readable source code that is a joy to contribute to.
color variations of the standard leaflet markers
A plugin to create a heatmap layer for Leaflet.
Leaflet utility function on geometries
A small plugin for leaflet to quickly draw arrowheads on polylines for vector visualization
Get started with Bootstrap, the world’s most popular framework for building responsive, mobile-first sites, with BootstrapCDN and a template starter page.
Maps and location for developers Precise location data and powerful developer tools to change the way we navigate the world.


Welcome to {{ title }}!
Create a new bingo meeting
Existing bingo meetings {{ meetings.length }}
{{m.meetingName}} created by {{m.participantName}}
Select me&make the other meetings disappear!
Error: {{err.status | json}} -> {{err.statusText | json}}
Made by Andrei Ignat & Alexandru Badita
Github project at : https://github.com/alexandru360/PresentationBingoCards/


${custom_payoff} This is a fully-configurable administrative tool to help you administer your website. Below is links to all of your models. They will bring you to a listing of the objects in your database.


A flow graph applet
December 1997
Alan Jeffrey
School of Cognitive and Computing Sciences
University of Sussex
Brighton BN1 9QH
UK
<EMAIL_ADDRESS>Premon is an applet which draws flow graphs from program texts.
As input it takes programs written in a simple language (a mixture of
C, Pascal and ML) and it draws graphs, either on-screen or as
Encapsulated PostScript.
This tutorial describes the applet and the language it is based on.
Previous |
Next


European rabbis 'building up communities'
Committee of Conference of European Rabbis gathers in Geneva to discuss ways to mutually support Jewish communities.
by Yoni KempinskiRabbi Menachem Gelley, Head of the Jewish court (Beit Din) of London and Chairman of the Standing Committee of the Conference of European Rabbis spoke to Arutz Sheva at the gathering of the Standing Committee in Geneva.
"As usual there are international issues and there are local issues," Rabbi Gelley says. "We're trying to build up communities, give support and strength to the smaller communities whether they're in Europe or in Eastern Europe.
"We're also trying to uphold Jewish living in all the cities. So those cities that are challenged or are going to be challenged with shechita, with Brit Milah, we have to assist them, we have to support them. And really, what we have to do is look in advance; don't wait until something's happened! See what we can do in advance where we see challenges and winds blowing in a direction we don't especially like or are concerned about and try to addend it then. So we've got eyes watching in many, many different cities around Europe."
"Very often it's not overt anti-Semitism, but there's certainly an element." The gathering of rabbis "gives tremendous power. It means we each support one another, and we're here to assist another country as soon as they need help, we're on a plane and we assist them."


--- layout: post title: Mobile and TV date: 2004-10-14 00:00:00 category: mobile ---
Tomi Ahonen on mobile/TV convergence:
"Don't try to bring in TV content to the mobile. Try to EXPAND the TV experience via the mobile phone."


{% extends 'base.html' %} {% set title = 'Introduction' %} {% block instructions %}
This is a collection of simple web security exercises.
{% endblock %} {% block exercise %}Test out your skills! You'll need basic knowledge of HTML and SQL.
Once you're done, try more advanced code labs:
{% endblock %}


Cloud Datalab
Beta
The Google Cloud Platform Standard Terms of Sevice notwithstanding, your use of Google Cloud Datalab Alpha is governed by the
TTA
and by using Google Cloud Datalab Alpha you agree to its terms.
Accept


Roost
Welcome to Roost, the app that gives a night of shelter.
In basic form - if you see a person on the street, rather than give them money you can talk to them and see if they need a place to stay that night.
If they do, you can find a hostel or shelter near where they want to be, and donate the cost of a night's stay to that hostel, in their name. If they feel afraid and wish to remain anonymous to you, or un-traceable until they get to the safety of the hostel, you can take a photo of them in place of their name, so the hostel knows who the place is going to that night.
If the person does not turn up by the hostel's curfew, you will have the option to either donate the space to anyone else to turns up that night, receive a credit to donate a place at another time, or you can donate the amount directly to the hostel.
Please add a card below to finish setting up your account.


We will discuss React Native, a framework for developing native mobile applications on both Android and iOS.
We will live code a simple mHealth step counter for both platforms.
Who is this guy?
Pediatric Cardiologist at Yale
Grew up with computers, beginning with TI 99/4A.
A year ago wrote and released the Yale Cardiomyopathy Index, one of the first Apple ResearchKit applications.
Before and since working in mobile health.
Historical Context
Computing ⟼ Desktop Networked ⟼ Mobile ⟼ ? Artificial Intelligence
Last 3-4 decades: Massive increase in computing power. iPhone 6: 120 million times faster than the Apollo computer.
Massive increase in communications power: Semaphore Line ⟼ 2015 International Telecommunications Union Report 3.2 billion on internet. Metcalf's Law
Massive increase in always-on communications capability / distance and decrease in cost of same. Massive decrease in device size. 2010 Arab Spring / 2013 #HasJustineLandedYet
Massive decrease in effort needed to begin and engage in communication. Enables Ecological Momemtary Assessments
Desktop Networked ⟼ Mobile
Early 2000s, Personal Computer Revolution had settled out on the web browser and a slowly standardizing and increasingly cross-platform set of principles.
Companies had invested large amounts of money, time, and effort in web programmers and their websites even though tech still 'in infancy'.
2007 = iPhone, 3/2008 = release of SDK: for all intents began the mobile development movement. Having invested heavily in web, could companies move some of these resources to mobile?
Amazon: Sells you physical goods, gets them to you
Apple: Sells you physical hardware + luxury items
Google: Runs web services, sells target markets to advertisers
Facebook: Runs a social network web service
Facebook
missed the start of mobile
“We do not currently directly generate any meaningful revenue from the use of Facebook mobile products, and our ability to do so successfully is unproven”
- 2012, Facebook SEC filing for IPO
“Mobile is going to crush Facebook”
- Mark Cuban, Facebook IPO Post Mortem
has Massive Engineering Resources
Remember these?
Facebook too tried to leverage their own similar web efforts...
And they did not succeed.
At least not initially
But they reapproached the 2 paradoxes, And solved them with a new approach
Revenue Per User
What is React Native?
A React Native App is a Real Mobile App. With React Native, you don't build a “mobile web app”, an “HTML5 app”, or a “hybrid app”.
React Native uses the same fundamental UI building blocks as regular iOS and Android apps. You just put those building blocks together using JavaScript and React.


--- title: 'Images: From R Markdown to HTML format' subtitle: 'An Exploration' author: Peter Baumgartner date: '2021-05-05' draft: no side_toc: false categories: - blogdown tags: - Hugo - knitr - Pandoc - R Markdown - markdown slug: images-from-rmd-to-html-format lastmod: '2021-05-05' featured: no image: placement: 2 caption: '' focal_point: '' preview_only: no summary: The post investigates different methods to include images in `.Rmd` files and how they are treated in the `blogdown` conversion process to HTML. output: blogdown::html_page: fig_caption: true number_sections: false toc: true toc_depth: 4 ---
This article is the first of a series of posts to investigate methods of inserting figures into different markdown formats. The resulting code depends on how images are included and the conversion tool they have to undergo. And — at least I think — also somewhat on the theme in use. In my case it is the blog widget of the starter-academic
theme.
Here I look at the process chain from Rmd via Pandoc to HTML. I will inspect inserting images with the following methods:
knitr::include_graphics()
.Of course, you can always include HTML instead of markdown code, but this case is not of interest here as there are no changes during the conversion process.
knitr
You can include external images with the knitr function include_graphics()
. There are many chunk options to specify the resulting figure, but not all are useful for external images.
out.width
and out.height
(not fig.width
or fig.height
, they are for R-generated plots)out.extra
to add CSS styles (see for details Style your image environment with CSS)fig.cap
is provided without fig.alt
, it will also function as alternative text, which is usually not desired.{{% callout warning %}} The fig.align
parameter generally works correctly, but not in this theme. It always centers to a 10 (instead 0f 12) column width. Left and right alignments do not work at all. I could not find and solve the problem.{{% /callout %}}
```
{r img-with-knitr, echo=FALSE, fig.align='center', out.width='50%', fig.cap='Caption for figure 1', fig.alt='Alternative text for figure 1'}
knitr::include_graphics("images/my-image.png")
```
```
<div class="figure" style="text-align: center"><span id="fig:img-with-knitr"></span>
<img src="images/my-image.png" alt="Alternative text for figure 1" width="50%">
<p class="caption">
Figure 1: Caption for figure 1
</p>
</div>
```
It is a stand-alone feature of knitr
to provide automatically generated figure numbers that you can reference via their id. The id is generated from the chunk name with the pattern fig:<chunk name>
. The figure 1 above can be referenced with \@ref(fig:img-with-knitr)
. Like this:
For more details see Figure 1.
{{% callout note %}} But in that case, you cannot use other methods to insert figures with numbers as knitr
will not be aware of them. {{% /callout %}}
The relevant selectors for CSS styles are div.figure
and p.caption
. We will see that these styles are consistent with all the other methods provided by RStudio windows. But Hugo’s figure shortcode uses the HTML tags figure
and figcaption
. In the R Markdown Coobook is a work around expained how you can produce these Hugo HTML tags with knitr
.
The CSS style I have used to display the image:
img {
border: 1px;
border-style: groove;
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px rgba(0, 0, 0, 0.19);
}
p.caption {
text-align: center;
margin-top: -0.5rem;
margin-bottom: 0.5rem;
font-size: smaller;
}
Using the knitr
function include_graphics()
for external images provides a rich set of image attributes (tags). It is also very flexible, especially if you are using the more complex possibilities like programming the output chunk hook.
out.extra
, example: out.extra='class="border shadowed"'
out.extra='style="background-color: #9ecff7; padding:10px; display: inline-block;"'
See blog post Tips and tricks for working with images and figures in R Markdown documentsThe possibilities of RStudio Addins window for blogdown
are sparse. But it has one big advantage: The addin helps user to provide the correct file path and copies the image to the right place.
The RStudio Addins window for blogdown
package allows only width / height arguments and alternative text. The content of the ‘alt’-attribute is in the final HTML code converted to the caption, which is not correct:
The alternate text should describe what you can see on the image in case the image does not appear (e.g., is blocked) or the user applies a screen reader. ‘Alt’ text is also rendered by search engines. Every picture should have a corresponding ‘alt’ attribute The caption by contrast is not so important. It provides additional information and appears under the image explaining the content to reader who are able to see the picture.
{{% callout warning %}} You can’t use the Addins ‘Insert Image’ in Visual R Markdown mode because it protects the conversion by adding a backslash in front of the squared brackets: !\[Alt text\](images/my-image.png)
.{{% /callout %}}
RStudio Addins window produces the following markdown code:
![**Figure 2:** Caption for this figure 2](images/my-image.png){width=100%}
I think starting with the RStudio version 1.4 (January 2021) the RStudio Addin window is superseded by the the Visual R Markdown window (see next section). If you are turning on the visual editor you can always enhance the rudimentary markdown of the addin window with all the features of Visual R Markdown.
For this improvement you need to
If you want to work with markdown directly you may turn off Visual RStudio Markdown.
Here I am referring to the RStudio Addin without enhancement from the Visual R Markdown window.

Figure 2: Caption for this figure 1

As you can see: The alt
attribute is empty, although I have filled it out!
{{% callout note %}} If you do not provide text for the alt
(= capture) attributes then there is no div.figure
and p.caption
class. In this case there is only the img
tag as you can see with the image under the header Markdown via Addins ‘Insert Image’. {{% /callout %}}
The conversion to HTML produced exactly the same classes as in the result with the knitr
image inclusion (see the CSS code under the knitr section).
You cannot simply write {{< shortcode >}} in R Markdown, because Pandoc is not aware of Hugo shortcodes, and may convert special characters so that Hugo can no longer recognize the shortcodes (e.g. < will be converted to <).1
With Blackfriday as default Markdown rendering engine I used to use for shortcodes the blogdown::shortcode()
function. But after Hugo v0.60 the default Markdown rendering engine changed to Goldmark. In the above quoted man page for the shortcode() function there is a also special note on this issue:
Since Hugo v0.60, Hugo has switched its default Markdown rendering engine to Goldmark. One consequence is that shortcodes may fail to render. You may enable the unsafe option in the configuration file: https://gohugo.io/getting-started/configuration-markup/#goldmark.
I couldn’t understand this remark as for me all the Hugo shortcodes works well. But to apply it more easily I use pure HTML code chunks to prevent a conversion by Pandoc. This has the advantage that I can include Hugo’s shortcode syntax without any changes.
```{=html}
{{< figure src="images/my-image.png" class="center" alt="My alt text" caption="My title text" id="shortcut-figure" numbered="true" >}}
```
The id
and numbered
attributes are not provided by but they are a feature from the academic theme.
id
explicitly then Hugo generates an ID with the “figure-” followed by the caption text (e.g., id="figure-my-caption-text"
).knitr
chunks. The same is true vice versa.target
, rel
and attribution (attr
= text; attrlink
= link).```{=html}
<figure id="figure-shortcut-figure">
<div class="d-flex justify-content-center">
<div class="w-100">
<img alt="My alt text" srcset="
/post/images-from-rmd-to-html-format/images/my-image_huf81a7faf920bb11d47d82b059b9dc0cf_20503_1061e20606536f4413fb34665581822b.png 400w,
/post/images-from-rmd-to-html-format/images/my-image_huf81a7faf920bb11d47d82b059b9dc0cf_20503_c4c18b47561549b1147ccf6dd152b5f0.png 760w,
/post/images-from-rmd-to-html-format/images/my-image_huf81a7faf920bb11d47d82b059b9dc0cf_20503_1200x1200_fit_lanczos_2.png 1200w" src="/post/images-from-rmd-to-html-format/images/my-image_huf81a7faf920bb11d47d82b059b9dc0cf_20503_1061e20606536f4413fb34665581822b.png" width="754" height="226" loading="lazy" data-zoomable="" class="medium-zoom-image"></div>
</div>
<figcaption data-pre="Figure " data-post=": " class="numbered">
My caption text
</figcaption>
</figure>
```
The produced HTML is pretty complex, but here we are just interested in the two relevant tags for CSS styling:

and

. These two HTML tag are different to the code produced by other methods of inserting images. So maybe it would be a good idea to style both variants the same way.
| Attribute | knitr | Addin | Visual | Hugo | Remark |
|---|---|---|---|---|---|
| Caption | ✅ | ✅ | ✅ | ✅ | |
| C. format | ❌ 2 | ✅ | ❌ | ❌ 2 | 2 standard = bold |
| C.numbered | ✅ | ❌ | ❌ | ✅ 3 | 3 via ‘Academic’ theme |
| Alt | ✅ | ❌ | ✅ 4 | ✅ | 4 via ‘Other’-field |
| Title | ❌ | ❌ | ✅ | ❌ | |
| Tooltip | ❌ | ❌ | ✅ | ❌ | |
| Width/Height | ✅ | ✅ | ✅ | ✅ | |
| Link to | ❌ | ❌ | ✅ | ✅ | |
| ID | ✅ 5 | ❌ | ✅ | ✅ 6 | 5 6 |
| CSS | ✅ | ❌ | ✅ | ✅ | |
| Other | ❌1 | ❌ | ✅ 7 | ✅ 8 | 1via output chunk arbitrary HTML code! 7 free choice! 8 |
If we take into account that code produced by the RStudio Addin window can be improved at any time with the Visual R Markdown window then all the four offered methods are pretty similar. But keep in mind that advantages on the one hand are often counter acted by disadvantages on other areas. So — for instance — provides the conversion via Pandoc many advantages but looses also some features of Hugo or the applied theme.
To sum up this this little investigation I see three patterns of decisions criteria:
knitr
method is obvious.But let’s see what the other file format are producing. For people using different methods2 for their posts perhaps the comparison inside one file format is not sufficient. Perhaps there is a method not ideal when considered only one file format but has a higher consistency when looked all file format together.
Helper functions to write Hugo shortcodes using the R syntax↩
As with blogdown version 1.3 not all files are automatically rendered, one could choose a different file and conversion format for every post separately. This requires (1) deleting those files produced by the conversion process in the folder of the post under consideration (2) renaming the file ending of the main file and kniting/rendering the new file format again.↩


Caitlyn Jenner still can't tell differenc ebetween Ant and Dec on I'm a Celeb
Caitlyn Jenner is still getting to grips with the new celebrities around her on I’m a Celebrity…Get Me Out Of Here.
But on Extra Camp tonight she was confronted with the biggest challenge of all – could she tell the difference between Ant and Dec?
Emily Atack asked the American star the question to end all questions via a direct chat with the Bush Telegraph on Monday’s episode of the spin-off show.
Caitlyn, as blunt as always, beamed as she said: ‘Do I know which one is Ant or which one is Dec?…No!’
But then she backtracked and said: ‘I think [I do]. Ant looks like an ant, with dark features and Dec, he’s a little bit shorter.
‘But see, I can remember Dec because of Dec-athlon. That’s what I did,’ she then said.
Advertisement Advertisement
Then cheekily added: ‘…But he doesn’t look like a decathlete.’
Hey, everyone gets them confused from time-to-time Cait! But we think you’ve got it cracked.
The 70-year-old campmate has become a firm favourite with viewers thanks to her parental nature with the others and her ever-quotable way of thinking.
However she could cost them dearly over the next couple of days after being caught handing Ian Wright a contraband corn on the cob from a banquet dinner that she won, but he missed out on.
While both completely denied doing it, Ian in particular was awful at being subtle about the food, and was seen clearly munching it in his hammock.
She was also seen leaning into Ant and Dec’s Geordie accent at the end of Monday night’s main episode, leaving the pair chuffed as she greeted them with an ‘Howay, Pet!’
Cheering her on for the efforts, after leaving the camp an excited Ant was clearly delighted as he declared: ‘She’s learned Geordie!’
You’ve done alreet, fellas!
I’m A Celebrity…Get Me Out Of Here continues weeknights at 9pm on ITV.
Advertisement Advertisement
Got a showbiz story? If you've got a celebrity story, video or pictures get in touch with the Metro.co.uk entertainment team by emailing us<EMAIL_ADDRESS>calling 020 3615 2145 or by visiting our Submit Stuff page - we'd love to hear from you.


| 007:041 Khan | : |
Theirs will be a bed of Hell (Fire), and over them coverings (of Hell-fire). Thus do We recompense the Zalimun (polytheists and wrong-doers, etc.). |
| 007:041 Maulana | : |
They shall have a bed of hell and over them coverings (of it). And thus do We requite the wrongdoers. |
| 007:041 Pickthal | : |
Theirs will be a bed of hell, and over them coverings (of hell). Thus do We requite wrong-doers. |
| 007:041 Rashad | : |
They have incurred Hell as an abode; they will have barriers above them. We thus requite the transgressors. |
| 007:041 Sarwar | : |
For them, hell will be both a cradle and a blanket. Thus do We punish the unjust. |
| 007:041 Shakir | : |
They shall have a bed of hell-fire and from above them coverings (of it); and thus do We reward the unjust. |
| 007:041 Sherali | : |
They shall have a bed of Hell and over them coverings of the same. And thus do WE requite the unjust. |
| 007:041 Yusufali | : |
For them there is Hell, as a couch (below) and folds and folds of covering above: such is Our requital of those who do wrong. |
Concepts/Themes Covered: الإيمان > الغيب > النار > أصحاب النار Faith> The Unseen World> Hell-Fire>Hell Fellows الإيمان > الغيب > النار > صفات النار Faith> The Unseen World> Hell-Fire>Hell Characteristics الإيمان > اليوم الآخر > جزاء العمل السيء Faith> The Hereafter> The Punishment of the Bad Work
This tool uses eight English parallel translations for the Holy Quran imported from Mr. Clay Smith. You can also visit Qurany Concepts for browsing the Quran themes or topics. If you want to search the Holy Quran for keywords, please visit Qurany Keywords.


| #define AXIS2_THREAD_MUTEX_DEFAULT 0x0 |
platform-optimal lock behavior
| #define AXIS2_THREAD_MUTEX_NESTED 0x1 |
enable nested (recursive) locks
| #define AXIS2_THREAD_MUTEX_UNNESTED 0x2 |
disable nested locks
| typedef struct axutil_thread_mutex_t axutil_thread_mutex_t |
Opaque thread-local mutex structure
| typedef struct axutil_thread_once_t axutil_thread_once_t |
Control variable for one-time atomic variables.
| typedef void*( AXIS2_THREAD_FUNC * axutil_thread_start_t)(axutil_thread_t *, void *) |
The prototype for any AXIS2 thread worker functions.
| typedef struct axutil_thread_t axutil_thread_t |
Thread callbacks from axis2 functions must be declared with AXIS2_THREAD_FUNC so that they follow the platform's calling convention. Thread structure.
| typedef struct axutil_threadattr_t axutil_threadattr_t |
Thread attributes structure.
| typedef struct axutil_threadkey_t axutil_threadkey_t |
Thread private address space.
| AXIS2_EXTERN axutil_thread_t* axutil_thread_create | ( | axutil_allocator_t * | allocator, | |
| axutil_threadattr_t * | attr, | |||
| axutil_thread_start_t | func, | |||
| void * | data | |||
| ) |
Create a new thread of execution
| attr | The threadattr to use to determine how to create the thread | |
| func | The function to start the new thread in | |
| data | Any data to be passed to the starting function | |
| cont | The pool to use |
| AXIS2_EXTERN axis2_status_t axutil_thread_detach | ( | axutil_thread_t * | thd | ) |
detach a thread
| thd | The thread to detach |
| AXIS2_EXTERN axis2_status_t axutil_thread_exit | ( | axutil_thread_t * | thd, | |
| axutil_allocator_t * | allocator | |||
| ) |
Stop the current thread
| thd | The thread to stop |
| AXIS2_EXTERN axis2_status_t axutil_thread_join | ( | axutil_thread_t * | thd | ) |
Block until the desired thread stops executing.
| thd | The thread to join |
| AXIS2_EXTERN axutil_thread_mutex_t* axutil_thread_mutex_create | ( | axutil_allocator_t * | allocator, | |
| unsigned int | flags | |||
| ) |
Create and initialize a mutex that can be used to synchronize threads.
| allocator | Memory allocator to allocate memory for the mutex |
| AXIS2_EXTERN axis2_status_t axutil_thread_mutex_destroy | ( | axutil_thread_mutex_t * | mutex | ) |
Destroy the mutex and free the memory associated with the lock.
| mutex | the mutex to destroy. |
| AXIS2_EXTERN axis2_status_t axutil_thread_mutex_lock | ( | axutil_thread_mutex_t * | mutex | ) |
Acquire the lock for the given mutex. If the mutex is already locked, the current thread will be put to sleep until the lock becomes available.
| mutex | the mutex on which to acquire the lock. |
| AXIS2_EXTERN axis2_status_t axutil_thread_mutex_trylock | ( | axutil_thread_mutex_t * | mutex | ) |
Attempt to acquire the lock for the given mutex. If the mutex has already been acquired, the call returns immediately
| mutex | the mutex on which to attempt the lock acquiring. |
| AXIS2_EXTERN axis2_status_t axutil_thread_mutex_unlock | ( | axutil_thread_mutex_t * | mutex | ) |
Release the lock for the given mutex.
| mutex | the mutex from which to release the lock. |
| AXIS2_EXTERN axis2_status_t axutil_thread_once | ( | axutil_thread_once_t * | control, | |
| void(*)(void) | func | |||
| ) |
Run the specified function one time, regardless of how many threads call it.
| control | The control variable. The same variable should be passed in each time the function is tried to be called. This is how the underlying functions determine if the function has ever been called before. | |
| func | The function to call. |
| AXIS2_EXTERN axutil_thread_once_t* axutil_thread_once_init | ( | axutil_allocator_t * | allocator | ) |
Initialize the control variable for axutil_thread_once.
| control | The control variable to initialize |
| AXIS2_EXTERN void axutil_thread_yield | ( | void | ) |
force the current thread to yield the processor
| AXIS2_EXTERN axutil_threadattr_t* axutil_threadattr_create | ( | axutil_allocator_t * | allocator | ) |
Create and initialize a new threadattr variable
| cont | The pool to use |
| AXIS2_EXTERN axis2_status_t axutil_threadattr_detach_set | ( | axutil_threadattr_t * | attr, | |
| axis2_bool_t | detached | |||
| ) |
Set if newly created threads should be created in detached state.
| attr | The threadattr to affect | |
| on | Non-zero if detached threads should be created. |
| AXIS2_EXTERN axis2_bool_t axutil_threadattr_is_detach | ( | axutil_threadattr_t * | attr, | |
| axutil_allocator_t * | allocator | |||
| ) |
Get the detach state for this threadattr.
| attr | The threadattr to reference |


{% extends "template" %} {% block content %}
Updated! Restart Home☆Star and you should be able to access your Nest devices.
This will allow Home☆Star to access your Nest devices
Enter it here:


Try to make your TenFour web address something short and familiar to the people in your organization.
Your organization's URL can only include lowercase letters, numbers, and dashes; and must start with a letter or number.