| CONTENTS | PREV | NEXT |
The
javax.imageio.ImageIO
class provides a set of static
convenience methods that perform most simple Image I/O operations.
Reading an image that is in a standard format (GIF, PNG, or JPEG) is simple:
File f = new File("c:\images\myimage.gif"); BufferedImage bi = ImageIO.read(f);
The format of the image will be auto-detected by the API based on the contents of the file. Most image files contain a "magic number" in their first few bytes that identifies the file format. For formats that do not have a magic number, auto-detection may fail and somewhat more sophisticated application code will be needed.
Additional formats may be handled by installing JAR files containing plug-ins; the details are described in the next chapter. Once a plug-in has been installed, a new format will be understood automatically without any changes to the application code.
The set of formats
available for reading can be obtained by calling
ImageIO.getReaderFormatNames
. This will return an
array of String
s containing the names of the available
formats, such as "gif" and "png."
Writing an image in a supported format is equally simple:
BufferedImage bi; File f = new File("c:\images\myimage.png"); ImageIO.write(im, "png", f);
The list of supported
formats may be obtained by calling
ImageIO.getWriterFormatNames
.


Plan: The plan was to make a rectangular pyramid out of the straws, as this seemed to be the most resilient structure for weight-bearing. The cup would be tied to the center, with the intention to distribute the weight of the pennies onto all 4 supports of the pyramid.
Result: Our structure actually performed the worst, as the cup touched the ground after 2 pennies were placed in the cup.
Conclusion: Our original structure was actually one of the best ideas, but our problem was that the pyramid was too close to the ground, and therefore could only hold a few pennies. The structure was strong, as it used triangles as weight-bearers, but the elasticity of the string caused the cup to drop under light weight.
My Contribution: I suggested that we incorporate triangles because they are one of the best shape for weight bearing as they distribute the weight.


I'm a technologist and a writer
I served as the Science Editor on the 134th Editorial Board of Cornell University's daily newspaper, The Cornell Daily Sun. I have also been a news and a science writer for the paper for a large part of my time at Cornell.
You can find out more about my role as Science Editor here and find other notable coverage here
In addition to objective reporting, I have also written well researched longform articles on technology and society. Here are some of them:
I am a Product Manager for the CDTI project -- Cornell Reviews. I manage a team of 7 people creating a course review system for the Cornell community using Meteor.js.
You can learn more about the process here I make final decisions on product, lead team meetings, brainstorming sessions, and ensure deadlines are met. My role is flexible role depending on immediate product needs; I have been actively involved in user research and web development in different part of the product development cycle.
The project can be found here
I work with Prof. Malte Zeiwitz of Cornell's Department of Science and Technology Studies to probe the question of due process in algorithmic systems.
In the last few years, algorithmic decisions have quickly become commonplace.Hiring managers use algorithms to sort through resumes and find the best candidate for a job; credit scoring algorithms track people’s payment history to assign them a low or high credit score; and predictive policing uses data to identify areas of potentially high crime
However, most companies keep their algorithms secret, so not even experts are allowed to peek inside the “black box.” So what can someone who believes he/she has been wrongfully classified, rejected or policed by an algorithm do to challenge the decision? This is the question I am exploring.
I worked on two projects over the course of a year at the Verifiable Robotics Lab at Cornell.
For the first project, I created a user interface (visualization tool) so that a non-technical user could understand and operate the robot. This visualisation tool was published as part of the paper "Automated generation of dynamics-based run-time certificates for high-level control"
The second project helped me learn concepts from Natural Language Processing using Python.


I am willing to offer you 20% ownership and Rs. 3 Lakhs in monthly salary if you full fill the following criteria in 3 months. You must be a guru at building and growing progressive startups, having already worked in leadership positions along side some. It goes without saying a great knowledge and deep understanding of design, tech and marketing required for growing our portfolio startups & clients are obviously a must! You will be responsible for building the team of A level players at 4Consult at blazing speed.
Apply »


Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: LibTIFF
Upstream-Contact<EMAIL_ADDRESS>Source: http://libtiff.maptools.org/
Files: *
Copyright: 1988-1997 Sam Leffler
1991-1997 Silicon Graphics, Inc.
1985-1987, 1990 Regents of the University of California
1990, 1991 Digital Equipment Corporation
1990 Sun Microsystems, Inc.
1990, 1995 Frank D. Cringle
1996 BancTec AB
1996 Mike Johnson
1996 Pixar
1997 Greg Ward Larson
2000 Frank Warmerdam
License: Hylafax
Files: debian/*
Copyright: 1997-1999 Guy Maor
1999-2004 Josip Rodin
2004-2015 Jay Berkenbilt
2015 Ondřej Surý
2015 Laszlo Boszormenyi (GCS)
License: Hylafax
License: Hylafax
Permission to use, copy, modify, distribute, and sell this software
and its documentation for any purpose is hereby granted without fee,
provided that (i) the above copyright notices and this permission
notice appear in all copies of the software and related
documentation, and (ii) the names of Sam Leffler and Silicon Graphics
may not be used in any advertising or publicity relating to the
software without the specific, prior written permission of Sam
Leffler and Silicon Graphics.
.
THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
.


import AppConstants from "../core/AppConstants";
import Hole from "../core/Hole";
import Move from "../core/Move";
import me from "../me";
import SeedGroupUI from "./SeedGroupUI";
import UiHelper from "./UiHelper";
/*
* bawo.zone - https://bawo.zone
* https://github.com/fumba/bawo.zone
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* Bawo board hole
*/
class HoleUI extends me.DroptargetEntity {
public readonly hole: Hole;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
public sleepingHoleSprite: any;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
public availableHoleSprite: any;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
public blockedHoleSprite: any;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
public startHoleSprite: any;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
public label: any;
/**
* @param {Hole} hole the hole to which this UI entity corresponds to
*/
constructor(hole: Hole) {
const settings = {
height: 80,
width: 80,
id: `${AppConstants.HOLE_UI}-${hole.UID}`,
};
let xOffSet = 40;
const newRowOffset = hole.id <= 7 ? 0 : 100;
let xFactor = hole.id < 8 ? hole.id : 15 - hole.id;
let yFactor = 0;
// nyumba hole x-location
if (hole.id == AppConstants.NYUMBA_HOLE_ID) {
xFactor = 8;
xOffSet = xOffSet + 20;
yFactor = 50;
}
const x = xFactor * 90 + xOffSet;
const y = (hole.player.isOnTopSide() ? 150 : 380) - yFactor + newRowOffset;
super(x, y, settings);
// overlaps are not valid drops
// draggable seed container UI (SeedGroupUI) has a smaller radius so all drops are expected
// to be contained within the hole radius.
this.setCheckMethod(this.CHECKMETHOD_CONTAINS);
this.hole = hole;
//load sprite for the different hole variations - available and locked
this.availableHoleSprite = new me.Sprite(0, 0, {
image: me.loader.getImage(AppConstants.HOLE_AVAILABLE_UI),
});
this.sleepingHoleSprite = new me.Sprite(0, 0, {
image: me.loader.getImage(AppConstants.HOLE_SLEEPING_UI),
});
this.blockedHoleSprite = new me.Sprite(0, 0, {
image: me.loader.getImage(AppConstants.HOLE_BLOCKED_UI),
});
this.startHoleSprite = new me.Sprite(0, 0, {
image: me.loader.getImage(AppConstants.HOLE_START_UI),
});
this.sleepStateUI();
this.renderable.alpha = 0.8;
this.label = new me.Text(this.pos.x + 15, this.pos.y - 12, {
font: "Arial",
size: 15,
fillStyle: this.color,
});
this.label.setText(this.seedCount());
hole.board.ui.addChild(this.label);
}
public sleepStateUI(): void {
if (this.hole.availableMovesForCurrentPlayer().length > 0) {
this.renderable = this.availableHoleSprite;
} else {
this.renderable = this.sleepingHoleSprite;
}
}
drop(seedGroupUI: SeedGroupUI): void {
// do not perform move if a drag and drop is performed on the same hole
const startingHole = seedGroupUI.hole;
if (startingHole.UID != this.hole.UID) {
console.info(`${seedGroupUI.id} dropped into ${this.id}`);
// only perform move only on destination holes that are adjacent from the starting hole
const moveDirection = startingHole.adjacencyDirection(this.hole);
if (moveDirection) {
const move = new Move(startingHole, moveDirection);
console.info(`UI requesting move: \n\t: ${move}`);
this.hole.board.executeMove(move);
}
} else {
console.info(
"drag and dropped into the same hole, ",
seedGroupUI.id,
this.id
);
}
}
public seedCount(): number {
let count = 0;
UiHelper.forEachUiSeedInHole(this.hole, () => {
count++;
});
return count;
}
}
export default HoleUI;
Source


Weary Democratic voters balk at new presidential candidates
by Associated PressCONCORD, N.H. (AP) — The number of Democrats running for president is growing as Election Day approaches. And on the ground in the states that matter most this primary season, voters have a clear message: Stop.
Former Massachusetts Gov. Deval Patrick launched a surprise bid last week and New York billionaire Michael Bloomberg may do the same in the coming days.
The late entries, less than 80 days before voting begins, have exposed a fresh divide in the Democratic Party.
On one side are anxious establishment leaders who are concerned about the direction of the race and welcome new candidates. On the other are voters and local officials across early voting states who are satisfied with their existing options.
The satisfied voters are yelling the loudest, but the fresh faces are not giving in.


Deploy, maintain, and invoke models via the Yhat REST API.
| Version: | 0.15.1 |
| Depends: | R (≥ 2.12.0) |
| Imports: | httr, jsonlite, stringr |
| Published: | 2017-05-09 |
| Author: | Greg Lamp, Stevie Smith, Ross Kippenbrock |
| Maintainer: | Greg Lamp <greg at yhathq.com> |
| License: | FreeBSD |
| URL: | https://github.com/yhat/yhatr |
| NeedsCompilation: | no |
| Materials: | README NEWS |
| In views: | ModelDeployment, WebTechnologies |
| CRAN checks: | yhatr results |
| Reference manual: | yhatr.pdf |
| Package source: | yhatr_0.15.1.tar.gz |
| Windows binaries: | r-devel: yhatr_0.15.1.zip, r-release: yhatr_0.15.1.zip, r-oldrel: yhatr_0.15.1.zip |
| OS X binaries: | r-release: yhatr_0.15.1.tgz, r-oldrel: yhatr_0.15.1.tgz |
| Old sources: | yhatr archive |
Please use the canonical form https://CRAN.R-project.org/package=yhatr to link to this page.


{% include 'head.html' %}
You can change your payment information or phone number here. If you experience issues or want to change the Google account you use for SMSJournal, please contact support at<EMAIL_ADDRESS>{% include 'phone_widget.html' %}Change the credit card associated with your SMSJournal account. You will not be charged until the next subscription period.
Use the button below to cancel your SMSJournal subscription. You will be able to use the service for the rest of the existing subscription period.


In search of the truth
Or Correlation is not Causation
Before I begin, I would like to point out that no technical information below is made up. It is all real, verifiable data. Any numbers presented should be reproducible on your system (and if not, I'd like to know about it and understand why). When I relate technology in a learning fashion, I strive to have examples that are representative and show how the software actually works. I will not ever make up numbers to support a conjecture. Not here in this paper, not in any of my writings on the internet, and certainly not in any books I author.
This article was prompted by my reading of a couple of articles, namely “Understand the Oracle ‘proof’ Myth” by Mike Ault and “Important new Oracle performance myth is debunked” by Don Burleson (note: the thread referenced in that article used to be 12 pages long, it is now 11. Hopefully anything I’ve referenced is still there when you read this. You can see it has been selectively edited by noting comments like “QUOTE (ora_dba_guy @ Apr 2 2005, 05:19 PM)” in a follow up but there is no posting apparently from ora_dba_guy at that time anymore. Or Don’s second to last posting where he addresses a posting that no longer exists). Jonathan Lewis has written an article “Can we have a sensible debate” that I think you should all read either before or after reading the “debunk” article this one. It will really help frame the conversation.
I have two guiding principles with regards to Oracle. One is that every day, each and every day, I learn something new about Oracle I did not know the day before. Each and every day. Maybe that is more of a fact than a principle but that is the way I approach the database. That mindset helps me keep my mind open to someone correcting something I’ve said.
The other one of my guiding principles is that I ask for proof from everyone (yes, it can be annoying, it carries over into my personal life as well. Ask my wife and kids). Is this a scientific/mathematical proof as in “prove the square root of 2 is not a rational number”? No, and it never has been. What I need to see is proof as in evidence. When I have a conjuncture, I try to rationalize, hypothesize why that conjecture might be true. Then I provide supporting evidence. Why do I do this? Is it because I can generate written material faster? No, not a chance. I could produce 10 times the material I do now if I skipped the illustrative examples. If I were to produce paragraphs instead of pages, I could be much more apparently productive.
Or would I be? Actually, what I have found time and time again is that the only thing I would accomplish would be to be wrong more often than I already am. When you rely on 'expert' advice, especially when you buy a book, or when you read a paper on the internet authored by a name known in the industry -- you expect more. You expect to be able to have a certain level of trust in the contents. You expect that the information, the advice being passed to you is more than likely "correct".
I know of only one way to accomplish that. That is to provide some “proof”, evidence. Some factual reasoning why what I believe to be true most likely is. And present it in a fashion that lets the entire world look at it and say “I understand”. Or, look at it and say “yeah, but…..”. I love “yeahbuts”, I learn more from “yeahbuts” than anything else. The "yeahbuts" out there look at the cause I am talking about, my hypothesized effects, my reasoning and say “yeah but we could accomplish it like this couldn’t we and it would be even better”. That, that makes my day.
Experts that offer advice without supporting evidence are in my opinion the danger. The advice might be actually good advice – when you understand the caveats that go with it. So I’m not really sure what to make of articles like the “Understand the Oracle ‘proof’ Myth”. From there I read:
What it has brought to light is the fact that you must be careful not only in what you believe to be true but in what you prove to be true
Huh, “but in what you prove to be true”. Forget for a minute the difference between “proving something to be true” and “providing some evidence that you know what you are talking about, factual evidence that can be tested by others” (Jonathan’s article covers that concept well) – I take exception to that statement. It was “obvious” in the past, just common knowledge that “a Doctor washing his hands was not professional”. Funny thing, I am rather glad someone decided to research this and debunk it. Aren’t you? (I sort of wish that atom bomb proof hadn’t been done, but that is getting into theology, personal beliefs and off topic). I myself am glad there are people out there taking “the obvious” and showing that what was “obviously” true, is actually false. He goes onto say:
So now we have a new crop of experts providing proofs (sometimes limited to a single-user, small database on a laptop) that their methods are the best and no doubt their proofs will be sited long after they are useful or meaningful and their expert advice will fade into old DBA tales as new technologies and methods become the rage. This is as it should be
…
So be careful in what you prove and how you prove it. What seems clever today may come back to haunt you. You may be apologizing several years down the road for what is right now, but not in the future..
Well, I would like to know who these experts are and where
their proofs are. But when asked
repeatedly in a recent
thread on their website, Mike and Don wouldn’t actually give any examples
of who these people are, nor would they point us to one of these bad
proofs. The proofs (aka evidence)
I repeatedly see is not a proof about “their methods”, but rather examples that
demonstrate how the software called Oracle actually works. The funny thing with the evidence (as you’ll
see in that thread, Mike and Don have a very strong hangup with this word
“proof” and have their own very strict definition for it) that these experts
find so quaint is that they or anyone can use that evidence. Anyone should be able to reproduce the
findings, study them to see if what they show still holds true. Without the
supporting evidence, we have in fact no chance whatsoever of seeing if what
they say even makes sense anymore.
For example, I’ll
give a true to life performance tip.
You’ll see this in many books.
You’ll see it my book
Effective Oracle By Design (and I
will not be apologizing for it). Now,
there are two ways I could present this performance tuning tip I’m about to
give. Here is a hypothetical way, and
then you’ll see how I really presented it:
<quote src=Never
To be Printed by Tom>
Use Bulk
Processing
It should be obvious that doing many operations in one call instead of many calls to the database is more efficient. I have seen many times that fetching our entire result set using BULK COLLECT in one SQL statement runs faster (about twice as fast) than doing the same thing a single row at a time.
The response times you see will be improved. The more data you bulk-fetch, the better relative performance you will see from the BULK COLLECT.
The larger the array size, the fewer logical IO’s you will do and the better the performance and scalability. You need to rewrite the code using PL/SQL table types or collections. We needed to declare variables to fetch into.
Bulk fetching is truly a good thing.
</quote>
Those couple of
paragraphs sum up very nicely the typical salient effects of Bulk Collecting in
PLSQL. It tells you that bulk collects
are good, they do many things in a single call, they are super efficient. You should use them, you should rewrite your
code to use them. There are no caveats
here, you are not shown how to measure your return on investment, nor are you
really given any measure beyond “about twice as fast”. It is short, to the point.
But it is seriously
lacking. What happens if you read this
and say, well if bulk collecting 100 rows is good, 1,000 must be really good
and heck, why use LIMIT at all, just bulk collect all of the rows at once. Or
what happens if most of your queries are 1 to 5 rows, does this hold as true
(is the extra work worth it)? Or, what
happens if you own 10g and read this?
Well, fortunately,
I won’t write like that. Too many times
in the past when just providing my experiences, I’ve been wrong. I use pages where others might use
paragraphs and try to convey an understanding of why what I say is true (or
not, you can see for yourself!). Here
is a quote from that book (very similar to others you’ll see in fine books like
Mastering Oracle PL/SQL: Practical Solutions by Connor McDonald) showing how I
truly believe all technical information needs to be presented. Your idea’s come out, what you think is true
comes out, some evidence supporting that is shown, the numbers are discussed, caveats explored – it is all right there:
<quote
src=Effective Oracle by Design>
Use Bulk
Processing When It Has Dramatic Effects
As an example, we'll compare processing the EMP table 14 rows at a time versus processing it a row at a time. Here is the version for row-at-a-time processing:
ops$tkyte@ORA920> exec runstats_pkg.rs_start;
PL/SQL procedure successfully completed.
ops$tkyte@ORA920> begin
2 for i in 1 .. 5000
3 loop
4 for x in ( select ename, empno, hiredate from emp )
5 loop
6 null;
7 end loop;
8 end loop;
9 end;
10 /
PL/SQL procedure successfully completed.
And here is the version that uses bulk processing:
ops$tkyte@ORA920> declare
2 l_ename dbms_sql.varchar2_table;
3 l_empno dbms_sql.number_table;
4 l_hiredate dbms_sql.date_table;
5 begin
6 for i in 1 .. 5000
7 loop
8 select ename, empno, hiredate
9 bulk collect into l_ename, l_empno, l_hiredate
10 from emp;
11 end loop;
12 end;
13 /
PL/SQL procedure successfully completed.
Running Runstats to compare the versions shows the following:
ops$tkyte@ORA920> exec runstats_pkg.rs_stop(10000);
Run1 ran in 274 hsecs
Run2 ran in 132 hsecs
run 1 ran in 207.58% of the time
This shows that fetching our entire result set using BULK COLLECT in one SQL statement runs faster (about twice as fast in this case) than doing the same thing a single row at a time.
The response times you see will be a function of the amount of data you array-fetch, as well. More or less data in the result set will have a definite impact on the performance here. The more data you bulk-fetch, up to a point, the better relative performance you will see from the BULK COLLECT over time. For example, when I put 56 rows in EMP, the BULK COLLECT version was 380% better. When I put 1 row in EMP, both versions ran in the same amount of time. At some point, however, the BULK COLLECT will cease being more efficient, as the amount of RAM it consumes increases greatly. Where that point is varies, but I find a BULK COLLECT size of about 100 rows to be universally "good" in practice. Later, we'll look at using the LIMIT clause to control this.
Looking further in the Runstats report, we see some interesting numbers:
Name Run1 Run2 Diff
STAT...session logical reads 80,522 15,525 -64,997
STAT...consistent gets 80,003 15,004 -64,999
STAT...buffer is not pinned co 70,000 5,000 -65,000
STAT...no work - consistent re 70,000 5,000 -65,000
STAT...table scan blocks gotte 70,000 5,000 -65,000
STAT...recursive calls 75,003 5,003 -70,000
LATCH.cache buffers chains 162,601 32,582 -130,019
Overall latching is reduced.
Run1 latches total versus runs -- difference and pct
Run1 Run2 Diff Pct
188,736 58,658 -130,078 321.76%
PL/SQL procedure successfully completed.y
That is analogous to what we observed in SQL*Plus in Chapter 2, when we played with the ARRAYSIZE setting while using AUTOTRACE. The larger the array size, the fewer consistent gets we performed, and the better the performance and scalability. The same rules apply here, but the impact is not as transparent as just adjusting an ARRAYSIZE setting is. Here, we needed to rewrite the code using PL/SQL table types or collections. We needed to declare variables to fetch into. We used more memory in our session. We can use V$MYSTAT, a dynamic performance view, to see the net effect on memory usage.
It is for these reasons that I recommend using bulk processing only where and when it would have the most dramatic effect. In the example shown here, it looks dramatic. But that is only because we did it for 14 5,000 rows. It would be worthwhile here, if you did that process many times. If you did that process for 50 rows, you would discover they run in about the same amount of time and that the BULK COLLECT actually does more latching!
</quote>
There you have pretty
much all of the facts – and perhaps most importantly you have some way to
verify the truth. Say you just bought
that book (I wrote that book as Oracle 9iR2 was in full swing, Oracle 10g was
still a glint in our eyes) and you read the advice. You might be tempted to take it to heart and write all of your
code using BULK COLLECT, or even worse, rewrite all of your existing code to do
so.
Only to discover
the expert is totally wrong.
Because things
change. (just a side note, most everything else in that books applies to
10g! And you have the examples
available to you to see that)
But fortunately you
bought the book with evidence, and you grabbed the examples from the
website. And you ran it in 10g. And you observed:
ops$tkyte@ORA10G> exec runStats_pkg.rs_start
PL/SQL procedure successfully completed.
ops$tkyte@ORA10G> begin
2 for i in 1 .. 5000
3 loop
4 for x in ( select ename, empno, hiredate from emp )
5 loop
6 null;
7 end loop;
8 end loop;
9 end;
10 /
PL/SQL procedure successfully completed.
ops$tkyte@ORA10G> exec runStats_pkg.rs_middle
PL/SQL procedure successfully completed.
ops$tkyte@ORA10G> declare
2 l_ename dbms_sql.varchar2_table;
3 l_empno dbms_sql.number_table;
4 l_hiredate dbms_sql.date_table;
5 begin
6 for i in 1 .. 5000
7 loop
8 select ename, empno, hiredate
9 bulk collect into l_ename, l_empno, l_hiredate
10 from emp;
11 end loop;
12 end;
13 /
PL/SQL procedure successfully completed.
ops$tkyte@ORA10G> exec runStats_pkg.rs_stop(10000)
Run1 ran in 51 hsecs
Run2 ran in 48 hsecs
run 1 ran in 106.25% of the time
Name Run1 Run2 Diff
Run1 latches total versus runs -- difference and pct
Run1 Run2 Diff Pct
58,709 58,859 150 99.75%
PL/SQL procedure successfully completed.
Well, it would seem
hardly worth it to do the bulk collect here wouldn’t it? The reason – in Oracle 10g, PLSQL is
silently array fetching 100 rows at a time for us, when we do “for x in (
select * from t “ – PLSQL has already bulk collected 100 rows. We no longer needed to do that extra code,
the extra work.
And, had I not had
a test case, I might still not know that. I might still be giving the advice
“bulk collect, everywhere”. Someone
reading my book was kind enough to email me and ask “why do I get these numbers
when I run your example”. 60 seconds of
research and I found out “why” (tkprof reveals a lot! A simple sql_trace=true
and away we go).
Now, it is ironic,
because in his quest to not have to show any evidence, Mike gives they reason
why supporting evidence is a good thing:
So be careful in what you prove and how you
prove it. What seems clever today may come back to haunt you. You may be
apologizing several years down the road for what is right now, but not in the
future. The net is an amazing place. No doubt you can find numerous places
where I may have expounded on the virtues of separation of indexes and
tables, on rebuilding indexes frequently or other items that have since been
proved, for current versions, old DBA tales. I like others before, am not
immune to time and neither is my advice.
If I had written the few paragraphs above (the ones without supporting evidence), then I would have to apologize. I would have to apologize for not giving you the truth, the whole truth and nothing but the truth and a way to find out if it was still the truth. Instead, I get to say “well, thank goodness you didn’t trust me and ran the examples in your testing/development environment. That is precisely why I supply them to you”. And then followup with this brand new feature of 10g that I was until that time not aware of (struck by the infamous but not elusive “yeahbut” animal again!).
It is ironic that if no one had taken the old “obvious”
advice of old and debunked it, we would still perhaps be listening to it? You see, if no one bothered proving that
that old wives tale of separate indexes from table data for performance (which
by the way was always an old wives tale, believe it or not, but that is another
thread) was in fact an old wives tale – what would we still be doing? If you have a conjecture based on your
experiences and you show how to see the
cause effect, not just state “it must be so”, why apologize. We all know
things change. My question to Mike –
without the evidence, how the heck are we going to know when something has
changed? So I would really like to understand why it would be bad to show
something it not true, to provide evidence – as Mike indicates it would be?
Mike closes that
article with this advice
If any paper you read
is older than a year or two, I suggest you take its advice with a big grain of
salt as it may be applicable only to history and not current events.
Critics love to dig up
old papers, presentations and advice given and use it to bludgeon people into
believing they are the only authority. Take this type of advice with a grain of
salt as well. In time, their advice will be referenced, out of date and out of
style.
I don’t see anyone
getting “bludgeoned”. I don’t see
anyone trying to be “the authority”. I do
however see a lot people having a discourse, showing evidence, backing up their
conjectures with reasoning. I
personally would have written the closing like this:
If any paper you read
tells you what but not why, regardless of its timestamp, I
suggest you take its advice with a big grain of salt as it may be applicable only
to only specific cases and not applicable to you at all. In fact, it could be something that was true
in the past and not true anymore. If
they give you no way to find out, ignore it.
I personally regard unsubstantiated advice from anyone as just that. Unsubstantiated. Depending on who told me, I might treat it differently. If Jonathan Lewis, Cary Millsap or others told me something in a conversation, I would place a high level of confidence in it (I might well still test the idea, in fact I know I would). But I would have a high degree of confidence in it. Why? Well because time and time again, they have backed up their comments with some logic, evidence, proof, facts. I feel confident that prior to making a claim, they would have already tested it out. If they hadn’t, the information would be conveyed with that fact made well known (that they hadn’t tested it, it was just an idea they had at that point). That is why I would trust their information – but probably still try it out. I know they do. But anyone that just says “I’ve seen it before, trust me”, sorry but no.
The economist had an interesting story, timely one actually, that was pointed out to me http://www.economist.com/science/displaystory.cfm?story_id=3809661 . My favorite comment in that article was this:
<quote>
Formal proof is a notion developed in the early part of the 20th century by logicians such as Bertrand Russell and Gottlob Frege, along with mathematicians such as David Hilbert (who can fairly be described as the father of modern mathematics) and Nicolas Bourbaki, the pseudonym of a group of French mathematicians who sought to place all of mathematics on a rigorous footing. This effort was subtle, but its upshot can be described simply. It is to replace, in proofs, standard mathematical reasoning which, in essence, relies on hand-waving arguments (it should be obvious to everyone that B follows from A) with formal logic.
</quote>
It should be obvious to everyone that B follows from A. Hand-waving arguments. Now, that article does not apply entirely to this topic, it is about mathematics and mathematical proofs. That is not what we are after here, we are after the truth. We would like to understand the cause/effect relationship between two things. Recently, I listed some of these in a follow-up to a question on my site. Concepts that were, sometimes still are, accepted as fact based on apparent correlations that were false positives (it should be obvious to everyone that B…)
Historically I believe false causality has been the greatest case of Oracle Myths. "Single extents are best". A falsehood brought about by observation based on export/import. There was truth to be gleaned from the export/import maneuver, however the conclusion many experts of the time came to was wrong. They observed something – that an export with compress=y followed by an import many times results in better performance. Obviously, it was due to a single extent (wave hands now).
Where there other reasons? Absolutely, and they are all valid – and fixable via other much less dramatic means. What had to be done however was to show some evidence that – if you hold all other things constant – segments in single extents performed comparably to segments in many hundreds or thousands of extents. That was in fact done, exposing the single extent myth for what it truly was. The papers exposing this myth typically went on to describe what symptoms the export/import probably fixed and other methods for achieving the same goal, in a better way.
For example, perhaps the table had many migrated rows (due to an improper pctfree setting) and exporting the table, importing it corrected that temporarily. Had we recognized the true cause/effect, we could have fixed that problem once and been done with it. No, instead we come to the conclusion that you need to exp/imp your tables on a recurring basis to get them into single extents. Many a script exists out there to find objects with double digit numbers of extents and “fix them”
Or, perhaps one of the indexes on the table was a “sweeping” index. It was an index on a column populated by a sequence. There was a process that put rows into this table. There is another process that looks for the “oldest unprocessed” row and processes it. For an example of this follow that link. The export/import of the table would have recreated that index (and in fact all indexes, whether they needed it or not). It would have solved this problem, but this problem would have been more readily solved by understanding how the data was used and rebuilding/coalescing precisely one index.
Maybe this was a case of “we purge data” and now the table contains lots of “whitespace” over time. And, we do full scan it. Export/Import would get rid of the whitespace. But we could have perhaps been avoiding the whitespace issue altogether as well.
And so on. Why is it relevant? I mean, if the export import accidentally fixes things, that is OK right? Well, no. First of all, every time you take data out of the database you risk losing it and having to go to backups. It incurred totally unnecessary downtime. It took much longer than it could have, had we looked at the problem. It causes lots of people to reorganize data frequently and unnecessarily.
So, does this still happen today? Absolutely. There is a lot of hand-waving arguments (it should be obvious to everyone that B follows from A) still. I’d like to look at one, it has come up on my site recently in this follow-up/review. It was talking about the ability to use multiple size blocks in Oracle 9i and up and whether indexes really “like” really large blocks. A reference to read first would be this white paper. It all sounds very good, doesn’t it. I see no caveats, no drawbacks, no “your mileage may vary”. I will be coming back to do another article, taking a look at the theory that large blocksizes are a good thing all around but that their adoption is being hindered by:
However, widespread acceptance of using multiple blocksizes has been hindered because the I/O reduction cannot be proven using simple SQL*Plus scripts on personal computers and because multiple blocksizes were originally created to support transportable tablespace
There might be a reason why their acceptance should be hindered (eg: what Don points out as a bad thing might well be a very good thing indeed). And it could be because of false causality. It will be a study in why apparent correlations could well be false positives. More study does need to be done. Wouldn’t you like to know if the perceived benefits of multiple blocksizes could be achieved in a much less intrusive way? Or how to actually measure their benefit? Or that the benefit that was measured actually was a benefit? (if that last statement confuses you, well, I’ll have to ask you to wait for the other paper to be completed)
I truly believe that people wanting to provide information should back it up. Give evidence. Yes, I know, we are all busy people and providing the evidence is “hard”, but if you want to be a published author, if you want people to accept your advice, you have to go that extra mile. The information you use should be real, not made up. You’ll find you make far far fewer errors that way. You should be able to explain everything in your findings – not most things – and you cannot just ignore things that don’t fit your hypothesis.
One of my favorite stories about this, making sure you know what you are talking about goes like this (it is true, not made up, swear to god, I have witnesses! 100 of them in fact for this one). There was a gentleman giving a seminar. During the weeks before the seminar he had an idea to allow the attendees to ask questions they had on their minds but never had the time to adequately research and answer themselves. Sounded like a good idea, but some of questions he received took a really long time to answer. It was a three day seminar, lots of stuff to get ready, much preparation was necessary, time was getting short. One of the questions was about the overhead of two phase commit. Well, how do you describe the overhead of a two phase commit? All you can do is set up some multi-user benchmarks in a distributed environment and check it out, measure it. Describe how to measure it so anyone could in their environment. This gentleman set up the test, did all of the work, collated all of the numbers, had nice findings. But apparently he proved that a distributed transaction will have a most profound effect on LGWR. LGWR is massively impacted by two phase commits. The log file syncs with two phase commits are provably very long. No two phase commit and no waiting. He came to this conclusion because the waits on log file sync jumped from “none” to “a whole bunch”. Obviously this is a side effect of two phase commits.
Fortunately or unfortunately depending on your perspective, there was a smart fellow in the audience. This was the first time this material was being presented and this smart fellow followed along carefully. As the presenter was finishing up this section and asking for questions – the following happened:
Jonathan Lewis raised his hand and asked Tom Kyte if he knew about the commit optimization in PLSQL (page down to my response from there for a demonstration of it). Sound of hand smacking forehead. Of course he says, that explains the difference – without a distributed transaction, PLSQL can do its commit time optimization and not suffer from log file syncs, whereas in a distributed environment that commit optimization cannot happen. So, while the evidence was valid, under the scrutiny of peers – it was shown to be incomplete. Had the simulation been performed with a Java/JDBC, Pro*C, OCI, VB, any other language other than PLSQL – the findings would have been different. So, if that person giving the seminar had just written into an article or a book “It has been my observation that if you two phase commit, you should expect to see massive increases in log file sync” (because his experience was on systems with lots of PLSQL) – that information would not apply to the public in general. It would not by true to anyone doing Java/JDBC programming for example. But by publishing his experience, his evidence, and subjecting it to review by peers, we know now the truth, the whole truth and nothing but the truth (and yet another reason to code database stuff in PLSQL perhaps!)
And, even better, if the truth changes in the future, we have the test case waiting in the wings to tell us that. If all we had were experts saying “do this, it is very good”, well, we would not. Features like that array fetch of 100 rows in PLSQL happening in 10g? I never would have known that had I not had test cases that were dramatically affected by it. I would have still be programming with BULK COLLECT in 10g, even though it is not necessary!
Things change.
It only takes one counter case to show something is not universally true.
Rules of thumb without evidence, without ways to test them before implementing them, are dangerous, seriously dangerous.


pcf.particle.aws.sqs package¶
Submodules¶
pcf.particle.aws.sqs.sqs_queue module¶
-
class
pcf.particle.aws.sqs.sqs_queue.
SQSQueue
(particle_definition, session=None)¶ Bases:
pcf.core.aws_resource.AWSResource
This is the implementation of Amazon’s SQS.
-
DEFINITION_FILTER
= {'Attributes', 'QueueName', 'Tags'}¶
-
START_ATTR
= {'ApproximateNumberOfMessages', 'ApproximateNumberOfMessagesDelayed', 'ApproximateNumberOfMessagesNotVisible', 'ContentBasedDeduplication', 'CreatedTimestamp', 'DelaySeconds', 'FifoQueue', 'KmsDataKeyReusePeriodSeconds', 'KmsMasterKeyId', 'LastModifiedTimestamp', 'MaximumMessageSize', 'MessageRetentionPeriod', 'Policy', 'QueueArn', 'ReceiveMessageWaitTimeSeconds', 'RedrivePolicy', 'VisibilityTimeout'}¶
-
START_PARAM_FILTER
= {'Attributes', 'QueueName'}¶
-
UNIQUE_KEYS
= ['aws_resource.QueueName']¶
-
_set_unique_keys
()¶ Logic that sets keys from state definition that are used to uniquely identify the sqs queue
-
_set_url
(owner)¶ Used when making changes or terminating pre-existing queue handles queues created by other accounts
- Params:
- owner: queue owner’s AWS ID
Returns: void
-
_start
()¶ Starts the SQS Queue according to the desired definition
Returns: response of boto3 create_queue
-
_stop
()¶ SQS does not have a stopped state so it calls terminate
Returns: response of terminate function
-
_terminate
()¶ Terminates the Queue identified by the Queue Name and optionally the Queue Owner
Returns: response of boto3 delete_queue
-
_update
()¶ Updates any changed tags or KMS key
Returns: void
-
equivalent_states
= {<State.running: 1>: 1, <State.stopped: 2>: 0, <State.terminated: 3>: 0}¶
-
flavor
= 'sqs_queue'¶
-
get_current_definition
()¶ Uses boto calls to get the Attributes and Tags for the Queue
Returns: current definition if the queue exists, otherwise None
-
is_state_definition_equivalent
()¶ Compared the desired state and current state definition
Returns: bool
-
sync_state
()¶ Uses get_current_definition to determine whether the queue exists or not and sets the state
Returns: void
-


dlibox configuration
Please write the access point (SSID) and the password for the wifi network:
Name:
Password:


Siddhesh
menu
Home
YouTube Channel
Blog
Projects
Experience
Contact
account_balance
Home
video_library
YouTube Channel
assignment
Blog
code
Projects
graphic_eq
Experience
near_me
Contact
YouTube


Windows
A fatal exception 0E has occured at 0028:C0011E36 in VXD VMM(01) . 00010E36. The current application will be terminated.
- Press any key to terminate the current application.
- Press CTRL+ALT+DEL again to restart your computer. You will lose any unsaved information in all applications.
Press any key continue. _


| 1 | /* | |
| 2 | * Licensed to the Apache Software Foundation (ASF) under one or more | |
| 3 | * contributor license agreements. See the NOTICE file distributed with | |
| 4 | * this work for additional information regarding copyright ownership. | |
| 5 | * The ASF licenses this file to You under the Apache License, Version 2.0 | |
| 6 | * (the "License"); you may not use this file except in compliance with | |
| 7 | * the License. You may obtain a copy of the License at | |
| 8 | * | |
| 9 | * http://www.apache.org/licenses/LICENSE-2.0 | |
| 10 | * | |
| 11 | * Unless required by applicable law or agreed to in writing, software | |
| 12 | * distributed under the License is distributed on an "AS IS" BASIS, | |
| 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| 14 | * See the License for the specific language governing permissions and | |
| 15 | * limitations under the License. | |
| 16 | */ | |
| 17 | package org.apache.commons.collections4.functors; | |
| 18 | ||
| 19 | import java.io.Serializable; | |
| 20 | ||
| 21 | import org.apache.commons.collections4.Factory; | |
| 22 | import org.apache.commons.collections4.FunctorException; | |
| 23 | ||
| 24 | /** | |
| 25 | * Factory implementation that always throws an exception. | |
| 26 | * | |
| 27 | * @since 3.0 | |
| 28 | * @version $Id: ExceptionFactory.java 1543950 2013-11-20 21:13:35Z tn $ | |
| 29 | */ | |
| 30 | public final class ExceptionFactory<T> implements Factory<T>, Serializable { | |
| 31 | ||
| 32 | /** Serial version UID */ | |
| 33 | private static final long serialVersionUID =<PHONE_NUMBER>121985545L; | |
| 34 | ||
| 35 | /** Singleton predicate instance */ | |
| 36 | @SuppressWarnings("rawtypes") // the static instance works for all types | |
| 37 | public static final Factory INSTANCE = new ExceptionFactory<Object>(); | |
| 38 | ||
| 39 | /** | |
| 40 | * Factory returning the singleton instance. | |
| 41 | * | |
| 42 | * @param <T> the type the factory creates | |
| 43 | * @return the singleton instance | |
| 44 | * @since 3.1 | |
| 45 | */ | |
| 46 | @SuppressWarnings("unchecked") // the static instance works for all types | |
| 47 | public static <T> Factory<T> exceptionFactory() { | |
| 48 |
1
1. exceptionFactory : mutated return of Object value for org/apache/commons/collections4/functors/ExceptionFactory::exceptionFactory to ( if (x != null) null else throw new RuntimeException ) → KILLED |
return (Factory<T>) INSTANCE; |
| 49 | } | |
| 50 | ||
| 51 | /** | |
| 52 | * Restricted constructor. | |
| 53 | */ | |
| 54 | private ExceptionFactory() { | |
| 55 | super(); | |
| 56 | } | |
| 57 | ||
| 58 | /** | |
| 59 | * Always throws an exception. | |
| 60 | * | |
| 61 | * @return never | |
| 62 | * @throws FunctorException always | |
| 63 | */ | |
| 64 | public T create() { | |
| 65 | throw new FunctorException("ExceptionFactory invoked"); | |
| 66 | } | |
| 67 | ||
| 68 | private Object readResolve() { | |
| 69 |
1
1. readResolve : mutated return of Object value for org/apache/commons/collections4/functors/ExceptionFactory::readResolve to ( if (x != null) null else throw new RuntimeException ) → KILLED |
return INSTANCE; |
| 70 | } | |
| 71 | ||
| 72 | } | |
Mutations | ||
| 48 |
1.1 |
|
| 69 |
1.1 |


We use anchor element most of types in document to jump from one document to another. Its good practice to represent link in attentive style
To remove underline from link, text-decoration: none
is used in css styling.
#myBtn {
background-color: #0688ef;
color: #fff;
padding: 10px 30px;
text-decoration: none;
border-radius: 5px;
}
Click Here
To go specific location in same document, id
attribute of that element is used in href
with #.
Go to Top


--- name: sass url: /sass title: Sass ---
Making changes is simple, in _settings.scss find the element you want to style (command/ctrl+f). Find the variable, uncomment the style, and change its value. Be sure to compile your sass to see the changes take affect
Here's an example set of settings variables. These change the default styling of buttons:
A mixin lets you make groups of CSS declarations that you want to reuse throughout your site. You can even pass in values to make your mixin more flexible. You can create custom mixins to speed up development, another example regarding buttons:
Then you can use your new custom button by simply include the following html:


Web developer with a Bachelor of Science from Washington State University; trained by Lambda School.
Learn moreI had a blast helping construct and design the front end for Curio, an app designed to showcase your collectibles. This app was created for a hackathon by a team of eight developers.
A simple app that fetches a random cat fact for you using React and Redux. Styled with styled-components and reactstrap.
Story Squad is a children's game that encourages reading and drawing. I worked on the front end of this project with UX designers on a team with data scientists, iOS developers, and other web developers.


What is new in Ring 1.9?¶
In this chapter we will learn about the changes and new features in Ring 1.9 release.
List of changes and new features¶
Ring 1.9 comes with the next features!
- New Game : Gold Magic 800
- More Games
- Better Ring Notepad
- Better StdLib
- BigNumber Library
- RingPostgreSQL Extension
- Deploying Web applications in the Cloud
- Better RingQt
- Better Memory Management
- Better Code Generator for Extensions
- More Improvements
New Game : Gold Magic 800¶
The Gold Magic 800 is a new puzzle game.
Ring 1.9 comes with the Demo Version (18 Levels) and the game source code.
Steam Page (44 Levels) : https://store.steampowered.com/app/939200/Gold_Magic_800/
We can select the level
The next screen shot for level (1)
The Gold Magic 800 Level Editor
More Games¶
The next games are added to Ring Applications
- The 2048 Game
- The Memory Game
- The Wise Quadrat Game
- The Tessera Game
- The Othello Game
The next screen shot for the 2048 game on Android
The next screen shot for the Tessera game
The next screen shot for the Othello game
Better Ring Notepad¶
- New Style
- New Mode
- Tabs for opened files
- Support executing batch files
Better StdLib¶
- The List2Code() function is added to the StdLib
This function convert a Ring list during the runtime to Ring source code that we can save to source files.
The list may contains strings, numbers or sub lists.
Example:
load "stdlibcore.ring"
aList = 1:10
? list2Code(aList)
Output:
[
1,2,3,4,5,6,7,8,9,10
]
- The Str2ASCIIList() and ASCIIList2Str() are added to the StdLib
Using these functions we can convert between string of bytes and a list of numbers where each item represent the ASCII code of one byte in the string.
So we may convert a string of bytes to ASCII List then do some operations on the list numbers (Like XOR)
Example:
load "stdlibcore.ring"
cStr = "MmMm"
aList = Str2ASCIILIST(cStr)
? aList
cStr2 = ASCIIList2Str(aList)
? cStr2
? len(cStr2)
Output:
77
109
77
109
MmMm
4
BigNumber Library¶
Using the BigNumber library we can do arithmetic operations on huge numbers.
Example:
load "bignumber.ring"
num1 = "62345678901234567891678345123456789" ### Big
num2 = "1237894567890123419871236545" ### Small
num3 = "64" ### Divide Small
num4 = "765432"
num5 = "3" ### Power
? "Add big numbers:"
a1 = new BigNumber(num1) a1.Print()
a2 = new BigNumber(num2) a2.Print()
a3 = a1 + a2 a3.Print() ? nl
? "Substract big numbers:"
a1 = new BigNumber(num1) a1.Print()
a2 = new BigNumber(num2) a2.Print()
a3 = a1 - a2 a3.Print() ? nl
? "Multiply big numbers:"
a1 = new BigNumber(num1) a1.print()
a2 = new BigNumber(num2) a2.print()
a3 = a1 * a2 a3.print() ? nl
? "Divide big numbers:"
a1 = new BigNumber(num1) a1.print()
a2 = new BigNumber(num2) a2.print()
a3 = a1 / a2 a3.print() ? nl
? "Divide big numbers: by very small number"
a1 = new BigNumber(num1) a1.print()
a2 = new BigNumber(num3) a2.print()
a3 = a1 / a2 a3.print() ? nl
? "Power of big number:"
a1 = new BigNumber(num1) a1.print()
a2 = new BigNumber(num5) a2.print()
a3 = a1 ^ a2 a3.print() ? nl
Output:
Add big numbers:
62345678901234567891678345123456789
1237894567890123419871236545
62345680139129135781801764994693334
Substract big numbers:
62345678901234567891678345123456789
1237894567890123419871236545
52345687663340000001554925252220244
Multiply big numbers:
62345678901234567891678345123456789
1237894567890123419871236545
77177377243260150103462178714197454736432472780119682305154005
Divide big numbers:
62345678901234567891678345123456789
1237894567890123419871236545
50364288
Divide big numbers: by very small number
62345678901234567891678345123456789
64
974151232831790123307474142554012
Power of big number:
62345678901234567891678345123456789
3
242336636261471172092347146031727004 (Output continue in next line)
371698195628343934238988256152289508 (Output continue in next line)
493964611043228971692389860897069
For more information check the BigNumber Library Chapter in the documentation
RingPostgreSQL Extension¶
Ring 1.9 provide native support for PostgreSQL database using the RingPostgreSQL Extension.
Example:
load "postgresqllib.ring"
conninfo = "user=postgres password=sa dbname = mahdb"
exit_nicely = func conn {
PQfinish(conn)
shutdown(1)
}
conn = PQconnectdb(conninfo)
if (PQstatus(conn) != CONNECTION_OK)
fputs(stderr, "Connection to database failed: "+PQerrorMessage(conn))
call exit_nicely(conn)
ok
res = PQexec(conn, "
DROP DATABASE mahdb;
")
if PQresultStatus(res) != PGRES_TUPLES_OK
fputs(stderr, "Remove failed: " + PQerrorMessage(conn))
PQclear(res)
ok
PQclear(res)
res = PQexec(conn, "CREATE DATABASE mahdb;")
if PQresultStatus(res) != PGRES_TUPLES_OK
fputs(stderr, "Create database failed: " + PQerrorMessage(conn))
PQclear(res)
ok
res = PQexec(conn, "
CREATE TABLE COMPANY (
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL );
")
if PQresultStatus(res) != PGRES_TUPLES_OK
fputs(stderr, "Create Table failed: " + PQerrorMessage(conn))
PQclear(res)
ok
PQclear(res)
res = PQexec(conn, "
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Mahmoud' , 31, 'Jeddah', 10.00 ),
(2, 'Ahmed' , 27, 'Jeddah', 20.00 ),
(3, 'Mohammed', 33, 'Egypt' , 30.00 ),
(4, 'Ibrahim' , 24, 'Egypt ', 40.00 );
")
if PQresultStatus(res) != PGRES_TUPLES_OK
fputs(stderr, "Insert Table failed: " + PQerrorMessage(conn))
PQclear(res)
ok
PQclear(res)
res = PQexec(conn, "
select * from COMPANY
")
if PQresultStatus(res) != PGRES_TUPLES_OK
fputs(stderr, "Select failed: " + PQerrorMessage(conn))
PQclear(res)
call exit_nicely(conn)
ok
nFields = PQnfields(res)
for i = 1 to nFields
? PQfname(res, i-1)
next
? copy("*",60)
for i = 1 to PQntuples(res)
for j=1 to nFields
see PQgetvalue(res, i-1, j-1) + " "
next
see nl
next
PQclear(res)
PQfinish(conn)
Output:
id
name
age
address
salary
************************************************************
1 Mahmoud 31 Jeddah 10
2 Ahmed 27 Jeddah 20
3 Mohammed 31 Egypt 30
4 Ibrahim 24 Egypt 40
For more information check the PostgreSQL Chapter in the documentation
Deploying Web applications in the Cloud¶
We created a new project and tutorial to explain how to deploy Ring web applications in the Cloud using Heroku
Demo : http://testring.herokuapp.com/
Project : https://github.com/ring-lang/RingWebAppOnHeroku
Heroku Website : https://www.heroku.com/
For more information check the Deploying Web Applications In The Cloud chapter in the documentation.
Better RingQt¶
- The next classes are added to RingQt
- QDrag
- QMimeData
- QDropEvent
- QDragMoveEvent
- QDragEnterEvent
- QDragLeaveEvent
- QClipboard
- QChildEvent
- QGeoPositionInfo
- QGeoCoordinate
- QGeoAddress
- QGeoAreaMonitorInfo
- QGeoAreaMonitorSource
- QGeoCircle
- QGeoPositionInfoSource
- QGeoRectangle
- QGeoShape
- QGeoSatelliteInfo
- QGeoSatelliteInfoSource
- QNmeaPositionInfoSource
- QAxWidget
- QTextStream
- QPrinterInfo
- QPrintPreviewWidget
- QPrintPreviewDialog
- QPageSetupDialog
- QAbstractPrintDialog
- QPrintDialog
- The next classes are updated
- QAllEvents Class : New Events (ChildAdded, ChildPolished, ChildRemoved).
- QPainter Class : Updated Methods (drawConvexPloygon, drawPoints, drawPolyline) Accept Ring list of points.
- QVariant : More versions that accept different parameters when creating the object.
- QAxBase : Different versions for the dynamicCall() and querySubObject() methods.
The next example for using the QPrintPreviewDialog class
Example:
load "guilib.ring"
new qApp {
win1 = new qwidget() {
setwindowtitle("Printer Preview Dialog")
setgeometry(100,100,800,880)
printer1 = new qPrinter(0)
show()
oPreview = new qPrintPreviewDialog(printer1) {
setParent(win1)
move(10,10)
setPaintrequestedevent("printPreview()")
exec()
}
}
exec()
}
func printPreview
printer1 {
painter = new qpainter() {
begin(printer1)
myfont = new qfont("Times",50,-1,0)
setfont(myfont)
drawtext(100,100,"Test - Page (1)")
printer1.newpage()
drawtext(100,100,"Test - Page (2)")
printer1.newpage()
myfont2 = new qfont("Times",14,-1,0)
setfont(myfont2)
for x = 1 to 30
drawtext(100,100+(20*x),"Number : " + x)
next
endpaint()
}
}
Screen Shot:
Better Memory Management¶
The Ring API is updated to include RING_API_RETMANAGEDCPOINTER()
Using RING_API_RETMANAGEDCPOINTER() the Ring extensions written in C/C++ languages can return a managed pointer to Ring. This pointer can be controlled by the Ring VM using reference counting.
This is important to avoid the need to write code that free the unmanaged resources like QPixMap objects in RingQt.
Also the Code Generator for extensions is updated to automatically use RING_API_RETMANAGEDCPOINTER() based on need.
Syntax:
RING_API_RETMANAGEDCPOINTER(void *pValue,const char *cPointerType,
void (* pFreeFunc)(void *,void *))
For more information about RING_API_RETMANAGEDCPOINTER()
See the “Extension using the C/C++ languages” Chapter in the documentation
Better Code Generator for Extensions¶
- The code generator for extensions is updated to support the <loadfile> command
<loadfile> filename.cf
This is useful to separate the extension configuraition file to many files
Example:
The file : qt_module_network.cf in the RingQt Extension
<comment>
Module (network)
</comment>
<loadfile> qabstractsocket.cf
<loadfile> qnetworkproxy.cf
<loadfile> qtcpsocket.cf
<loadfile> qtcpserver.cf
<loadfile> qhostaddress.cf
<loadfile> qhostinfo.cf
<loadfile> qnetworkrequest.cf
<loadfile> qnetworkaccessmanager.cf
<loadfile> qnetworkreply.cf
- The code generator support the <managed> option when defining classes.
Using this option, the generator will use RING_API_RETMANAGEDCPOINTER() to return the C pointer.
So the Garabage Collector will manage these C pointers.
Example
<class>
name: QFont
para: QString, int, int, bool
managed
</class>
More Improvements¶
- Ring Compiler - The Rule (Factor -> ‘-‘ Expr) changed to (Factor -> ‘-‘ Factor).
- Ring VM - Better Error Message.
- Better code for IsNULL() function - updated to check pointers too.
- Better code for ringvm_evalinscope() function - used by the Trace Library.
- Better code for Space() function.
- Better code for Hex() and Dec() functions.
- Better code for Download() function.
- Better code for SubStr() function.
- Better code for the Unsigned() function.
- Better code for Chdir() function.
- Better code for Tempname() function.
- Better code for HashTable - New Key (using ring_strdup() instead of strdup() function).
- New Function : SRandom() - Initialize random number generator.
- New Function : IsPointer().
- IsList() will not return True for C Pointers, we have now the IsPointer() function.
- The ? Operator is updated to respect the ringvm_see() function.
- Scripts to run Ring tests on Linux and macOS (Not only Windows).
- RingAllegro is Updated from Allegro 5.1 to Allegro 5.2.
- Shader Functions are added to RingAllegro.
- Joystick Functions are added to RingAllegro.
- Network functions are added to RingLibSDL.
- Game Engine for 2D Games - Text Class - Check the font object before usage.
- Game Engine for 2D Games - Automatic support for Joystick.
- RingLibCurl is updated to automatically use CURLOPT_COPYPOSTFIELDS when needed.
- Ring Notepad - Find Previous Feature.
- Ring Notepad - Default Style.
- Ring Notepad - Support using Non-English language (Like Arabic) in file names.
- Form Designer - Nice Aliginment for Toolbox Icons.
- Form Desginer - QAllEvents Class - Mouse Double Click Event.
- Find in Files - Replace and Replace All options.
- Qt Class Converter is updated for better conversion results.
- More samples are added to ring/samples/other folder.
- Code Refactoring for Ring Notepad, RingQt, Game Engine for 2D Games.
- Better Documentation - Many images are updated to reflect the current state of Ring Environment.
- Better Documentation - More chapters are added to the documentation.


|
Bullet Collision Detection & Physics Library
|
Static Public Member Functions | |
| static void | mul (UWord a, UWord b, UWord &resLow, UWord &resHigh) |
Static Private Member Functions | |
| static uint32_t | high (uint64_t value) |
| static uint32_t | low (uint64_t value) |
| static uint64_t | mul (uint32_t a, uint32_t b) |
| static void | shlHalf (uint64_t &value) |
| static uint64_t | high (Int128 value) |
| static uint64_t | low (Int128 value) |
| static Int128 | mul (uint64_t a, uint64_t b) |
| static void | shlHalf (Int128 &value) |
Definition at line 576 of file btConvexHullComputer.cpp.
|
inlinestaticprivate |
Definition at line 579 of file btConvexHullComputer.cpp.
|
inlinestaticprivate |
Definition at line 599 of file btConvexHullComputer.cpp.
|
inlinestaticprivate |
Definition at line 584 of file btConvexHullComputer.cpp.
|
inlinestaticprivate |
Definition at line 604 of file btConvexHullComputer.cpp.
|
inlinestaticprivate |
Definition at line 589 of file btConvexHullComputer.cpp.
|
inlinestaticprivate |
Definition at line 609 of file btConvexHullComputer.cpp.
|
inlinestatic |
Definition at line 621 of file btConvexHullComputer.cpp.
|
inlinestaticprivate |
Definition at line 594 of file btConvexHullComputer.cpp.
|
inlinestaticprivate |
Definition at line 614 of file btConvexHullComputer.cpp.


Who are the top 10 people on the leaderboard for a specific workZone?
GET /alpine/leaderboard?workZone=+Santa+Clara%2C+CA+95054%2C+USA HTTP/1.1 Host: test.alpineconnectivity.com:8888
For each individual input parameter ...
| workZone (required) | The zone the user is located in. |
The following response codes are possible from this service.
(Client code must handle each of them.):
The content of the body of the HTTP Response will always be JSON.
Therefore, the following header will always
be sent:
Content-Type: application/json
The body of the response should always contain JSON.
The type of JSON returned varies by the response code.
3 types of JSON are possible.
HTTP/1.1 200 Success { "leaderboard": [ { "zip": "95054", "rank": 1, "score": 6588, "nickname": "Snowy" }, { "zip": "95054", "rank": 2, "score": 4908, "nickname": "Trav" }, { "addr": "3151 Jay Street, Santa Clara, CA 95054, USA", "zip": "95054", "rank": 3, "score": 1603, "nickname": "snowleopard" }, { "addr": "3121 Jay Street, Santa Clara, CA 95054, USA", "zip": "95054", "rank": 4, "score": 329, "nickname": "atreat" }, { "addr": "3151 Jay Street, Santa Clara, CA 95054, USA", "zip": "'", "rank": 5, "score": 103, "nickname": "hiro" }, { "addr": "3151 Jay St, Santa Clara, CA 95054, USA", "zip": "95014", "rank": 6, "score": 47 }, { "zip": "95054", "rank": 7, "score": 30, "nickname": "islocar" }, { "zip": "95054", "rank": 8, "score": 25 }, { "zip": "95054", "rank": 9, "score": 23, "nickname": "Koich" }, { "addr": "3151 Jay Street, Santa Clara, CA 95054, USA", "zip": "95054", "rank": 10, "score": 18 } ] }
Data in the JSON ...
| leaderboard.rank (guaranteed) |
The rank of the user. |
| leaderboard.score (guaranteed) |
The score of the user. |
| leaderboard.nickname (guaranteed) |
Nickname of the user. |
| leaderboard.zip (guaranteed) |
zip code |
If there was a major error in the request that prevents us from even processing it,
the standard JSON
describing the error will be returned in the body of the response:
HTTP/1.1 400 Bad Request { "errorCode": 1, "errorMessage": "INVALID JSON", "data": "No JSON was POSTed!" }
If there was a major error on the server,
the standard JSON describing the error will be returned in the body
of the response:
HTTP/1.1 500 Server Error { "errorCode": 3, "errorMessage": "SERVER ERROR", "data": "Unable to connect to the database." }


SweetFreeStuff.com
///////////////////////////////////////////
Free Huggies Diapers and Wipes Sample Pack (Costco Members)
Posted: 18 Jul 2014 11:30 AM PDT
http://feedproxy.google.com/&;r/SweetFreeStuff/&;3/94gcv5-l3k8/?utm_source=feedburner&utm_medium=email
Receive a free sample pack of: Three Huggies Snug Dry Diapers and One pack
of Huggies Natural Care Plus Wipes. Costco Member ID required. Free Huggies
Diapers and Wipes Sample Pack (Costco Members)
The post Free Huggies Diapers and Wipes Sample Pack (Costco Members)
appeared first on SweetFreeStuff.com.
///////////////////////////////////////////
FREE 2-Liter Dr Pepper TEN at Kroger & Affiliate Stores
Posted: 18 Jul 2014 11:25 AM PDT
http://feedproxy.google.com/&;r/SweetFreeStuff/&;3/32kldfuj8b4/?utm_source=feedburner&utm_medium=email
Load the coupon to your shoppers card today only (7/18), and use by 8/2.
Receive ONE (1) FREE 2-Liter of 7UP TEN®, AW TEN®, Sunkist TEN Soda®,
Canada Dry TEN® or Dr Pepper TEN®. FREE 2-Liter Dr Pepper TEN at Kroger
Affiliate Stores
The post FREE 2-Liter Dr Pepper TEN at Kroger Affiliate Stores appeared
first on SweetFreeStuff.com.
///////////////////////////////////////////
Free Weleda Skin Food Sample
Posted: 18 Jul 2014 01:08 AM PDT
http://feedproxy.google.com/&;r/SweetFreeStuff/&;3/_t6xAaZUoV8/?utm_source=feedburner&utm_medium=email
Free Weleda Skin Food Sample
The post Free Weleda Skin Food Sample appeared first on SweetFreeStuff.com.
///////////////////////////////////////////
Free Book: Safe in the Arms of God
Posted: 18 Jul 2014 12:20 AM PDT
http://feedproxy.google.com/&;r/SweetFreeStuff/&;3/CL9z0iJHNYU/?utm_source=feedburner&utm_medium=email
Sign up to receive your free copy of Safe in the Arms of God from Grace to
You.
The post Free Book: Safe in the Arms of God appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
10 Free Pampers Gifts to Grow Points
Posted: 17 Jul 2014 11:15 PM PDT
http://feedproxy.google.com/&;r/SweetFreeStuff/&;3/FGTdnEyJ1rc/?utm_source=feedburner&utm_medium=email
Sign in or register, then click Ive Read It at the end of this article for
10 free points. (If you need to register, click here to sign up and receive
100 points!)
The post 10 Free Pampers Gifts to Grow Points appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Keebler or Cheez-It Snack Cup
Posted: 17 Jul 2014 11:02 PM PDT
http://feedproxy.google.com/&;r/SweetFreeStuff/&;3/eq_8yu-dzrE/?utm_source=feedburner&utm_medium=email
Save 100% when you buy any ONE (1) Keebler® or Cheez-It® Snack Cup (2.2
3.0 oz.) Expires 7/20. Free Keebler or Cheez-It Snack Cup
The post Free Keebler or Cheez-It Snack Cup appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Subscription to Ebony Magazine
Posted: 17 Jul 2014 10:05 PM PDT
http://feedproxy.google.com/&;r/SweetFreeStuff/&;3/SHYAnReJ8rw/?utm_source=feedburner&utm_medium=email
The post Free Subscription to Ebony Magazine appeared first on
SweetFreeStuff.com.


How to install and configure Zerto in your local environment
Overview
If you want to use UKCloud's Disaster Recovery as a Service or Migration to the Cloud services, there are some tasks that you must perform to prepare your local environment.
UKCloud's Disaster Recovery as a Service enables you to provide a secure, scalable disaster recovery solution for your on-premises environment by replicating your workloads on the UKCloud platform
Migration to the Cloud enables you to move your workloads from a local, on-premises environment onto the UKCloud platform.
Our Disaster Recovery as a Service and Migration to the Cloud services are powered by Zerto, a leading provider of disaster recovery software for the cloud, so you'll need to install Zerto software in your local environment to enable the replication of your workloads to the UKCloud platform. You'll also need to create a IPsec VPN to connect your local environment to the UKCloud.
Intended audience
To complete the steps in this guide, you must have administrator access to the vCenter Server that hosts the VMs that you want to protect or migrate.
Before you begin
When you raise a Service Request for Disaster Recovery as a Service or Migration to the Cloud, UKCloud provides you with:
A ZORG ID to identify your environment within Zerto
A link to the appropriate version of Zerto Virtual Manager (ZVM) for you to deploy in your local environment as well as a site address and port for licensing purposes
The IP address (from the IP range you provided to UKCloud) of the Zerto Cloud Connector (ZCC) deployed in your target VDC (for recovery or migration); you'll need this to complete the setup of the site-to-site VPN between your local environment and your target VDC
Access to the Zerto Self-Service Portal (ZSSP) in the UKCloud zone where your target VDC is located
Installing and configuring Zerto Virtual Manager in your local environment
As UKCloud's Disaster Recovery as a Service and Migration to the Cloud services are powered by Zerto, you need to set up Zerto Virtual Manager (ZVM) in your local environment to enable your VMs to be replicated on the UKCloud platform. ZVM is responsible for all the Zerto configuration for a site and performs the replication tasks.
UKCloud provides a version of ZVM that is compatible with the Zerto software on the UKCloud platform.
Download and run the executable file from the link provided by UKCloud.
Note
Install ZVM on a Windows Server 2008 R2 SP1 (KB3033929 and KB2864202 or relevant superseded KBs), 2012 R2, 2016 or 2019 server, ideally with nothing else running on it.
On the Welcome page of the Zerto Virtual Replication Installation for VMware vSphere wizard, read the information provided then click NEXT.
On the License Agreement page, accept the agreement and then click NEXT.
On the Select Installation Folder/Directory page, change the location if necessary and then click NEXT.
On the Choose Installation Type page, select Express installation and then click NEXT.
On the vCenter Server Connectivity page, in the IP / Host Name field, enter the address of the vCenter Server that hosts the VMs that you want to protect or migrate.
In the Username and Password fields, enter the administrator credentials for the vCenter Server.
In the Site Name field, enter a name to identify the location of this installation of ZVM and then click NEXT.
On the Validation page, fix any issues if necessary and then click RUN.
After ZVM has finished installing, on the Install Complete page, select the Open the Zerto Virtual Manager interface checkbox and then click DONE.
Log in to the Virtual Manager Web Client using your vCenter Server administrator credentials.
The first time you log in, you'll need to enter licensing details.
As you are using ZVM as part of a UKCloud service, select Pair to a site with a license and enter the Site Address and Port provided by UKCloud.
Click START.
In ZVM, select the SETUP tab.
Click NEW VRA.
The Virtual Replication Appliance (VRA) manages the replication of VMs across the two sites.
In the Configure and Install VRA dialog, from the Host list, select the IP address of the server that hosts the VMs that you want to protect or migrate.
In the Host Root Password field, enter the root password of the VM host server.
Complete the other fields in the Host Details section as required.
In the VRA Network Details section, enter a static IP address and the gateway details of the network for the VRA to use.
Click Install.
After the VRA has finished installing, you should be able to see your new VRA in the SETUP tab.
Creating a VPN between your local environment and UKCloud
As you'll be replicating your VMs from your local environment onto the UKCloud platform, you need to create a secure connection between the two sites. You can do this by creating a site-to-site VPN.
For information about how to create a site-to-site VPN, see How to configure IPsec VPN.
The following table lists the minimum firewall rules required for Zerto to pair and replicate with the UKCloud platform.
| Source device | Target service | Port | Direction | Purpose |
|---|---|---|---|---|
| Customer ZVM | Service Provider ZCC | TCP 9081 | Bi-directional | ZVM to ZCC communication |
| Customer VRA | Service Provider ZCC | TCP 4007* | Bi-directional | TCP control communication between source and target VRAs and ZCC |
| Customer VRA | Service Provider ZCC | TCP 4008* | Bi-directional | TCP communication to pass data between source and target VRAs and ZCC |
* We recommend that you use ports 9082 to 9200 to allow for increase in VRA on source and target sites.
Next steps
Now that you have prepared your local environment for Disaster Recovery as a Service or Migration to the Cloud, you can create a virtual protection group (VPG) to identify the VMs that you want to protect or migrate. For more information, see How to create a virtual protection group.
Feedback
If you find a problem with this article, click Improve this Doc to make the change yourself or raise an issue in GitHub. If you have an idea for how we could improve any of our services, send an email to feedback@ukcloud.com.


Wiki.js
Set up the timezone:
sudo dpkg-reconfigure tzdata
sudo apt update && sudo apt upgrade -y
Install some essential packages that are necessary for basic administration of Ubuntu operating system:
sudo apt install -y curl wget vim git unzip socat bash-completion apt-transport-https build-essential
Install Node.js and npm
Download and install the latest recommended version of Node.js from the NodeSource repository:
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt install -y nodejs
NOTE: npm is distributed with Node.js - which means that when you download Node.js, you automatically get npm installed on your system.
sudo apt-get install -y nodejs
To install the Yarn package manager, run:
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarnkey.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update && sudo apt-get install yarn
Npm is a separate project from Node.js and tends to update more frequently. As a result, even if you’ve just downloaded Node.js (and therefore npm), you’ll probably need to update your npm. Luckily, npm knows how to update itself! To update your npm, type this into your terminal:
sudo npm install -g npm@latest
This command will update npm to the latest stable version.
Re-check npm version with:
npm -v
And it should return the latest version number.
Database
Install SQLite
o install the SQLite command-line interface on Ubuntu, first update your package list:
sudo apt update
Now install SQLite:
sudo apt install sqlite3
To verify the installation, check the software’s version:
sqlite3 --version
You will receive an output like this:
Output 3.31.1 2020-01-27 19:55:54 3bfa9cc97da10598521b342961df8f5f68c7388fa117345eeb516eaa837balt1 With SQLite installed, you are now ready to create a new database.
Creating a SQLite Database
In this step you will create a database containing different sharks and their attributes. To create the database, open your terminal and run this sqlite3 command:
sqlite3 wiki.sqlite
Don't use underscore here. It'll cause connection error undefined.
This will create a new database named sharks. If the file sharks.db already exists, SQLite will open a connection to it; if it does not exist, SQLite will create it.
You will receive an output like this:
Output
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
Following this, your prompt will change.
A new prefix, sqlite>, now appears:
If the file sharks.db does not already exist and if you exit the sqlite promote without running any queries the file sharks.db will not be created. To make sure that the file gets created, you could run an empty query by typing ; and then pressing “Enter”. That way you will make sure that the database file was actually created.
With your Shark database created, you will now create a new table and populate it with data.
Nginx and SSL
follow this: Moodle install 2021
do the nginx server config file that way too.
sudo openssl dhparam -out /etc/nginx/dhparam.pem 2048
Find the relevant paths using
sudo certbot certificates
Install and setup Wiki.js
Download wiki.js
Create a document root directory where Wiki.js should reside in:
sudo mkdir -p /var/www/wiki.js
Navigate to the document root directory:
cd /var/www/wiki.js
Create a user for wikijs
sudo useradd -d /var/www/wiki.js wikijs
Change ownership of the /var/www/wiki.js directory to wikijs user:
sudo chown -R wikijs:wikijs /var/www/wiki.js
From /var/www/wiki.js directory, run the following command to fetch and install the latest Wiki.js application:
cd /var/www/wiki.js
sudo su wikijs
wget https://github.com/Requarks/wiki/releases/latest/download/wiki-js.tar.gz
tar xzf wiki-js.tar.gz
Configure Wiki.js
Create the configuration file from the sample file.
cp config.sample.yml config.yml
Update the configuration file with the appropriate information.
nano config.yml
Find the following database settings:
db:
type: sqlite
storage: db.sqlite
For best performance and security, you will use Nginx as a reverse proxy for Wiki.js. Find and update the setting bindIP: <IP_ADDRESS>
to bindIP: <IP_ADDRESS>
to make Wiki.js listen on the loopback address.
npm rebuild sqlite3
node server
You should see something like this:
2021-06-09T16:46:48.187Z [MASTER] info: =======================================
2021-06-09T16:46:48.190Z [MASTER] info: = Wiki.js 2.5.201 =====================
2021-06-09T16:46:48.191Z [MASTER] info: =======================================
2021-06-09T16:46:48.191Z [MASTER] info: Initializing...
2021-06-09T16:46:49.079Z [MASTER] info: Using database driver pg for postgres [ OK ]
2021-06-09T16:46:49.086Z [MASTER] info: Connecting to database...
2021-06-09T16:46:49.117Z [MASTER] info: Database Connection Successful [ OK ]
2021-06-09T16:46:49.467Z [MASTER] warn: DB Configuration is empty or incomplete. Switching to Setup mode...
2021-06-09T16:46:49.468Z [MASTER] info: Starting setup wizard...
2021-06-09T16:46:49.740Z [MASTER] info: Starting HTTP server on port 3000...
2021-06-09T16:46:49.741Z [MASTER] info: HTTP Server on port: [ 3000 ]
2021-06-09T16:46:49.745Z [MASTER] info: HTTP Server: [ RUNNING ]
2021-06-09T16:46:49.745Z [MASTER] info: 🔻🔻🔻🔻🔻🔻🔻🔻🔻🔻🔻🔻🔻🔻🔻🔻🔻🔻🔻🔻🔻🔻🔻🔻🔻🔻🔻🔻🔻
2021-06-09T16:46:49.745Z [MASTER] info:
2021-06-09T16:46:49.746Z [MASTER] info: Browse to http://YOUR-SERVER-IP:3000/ to complete setup!
2021-06-09T16:46:49.746Z [MASTER] info:
2021-06-09T16:46:49.746Z [MASTER] info: 🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺🔺
If so, the configuration is correct, and Wiki.js is running. Press CTRL + C to stop Wiki.js, then switch back to the sudo user to continue with the setup.
$ exit
Create a systemd Service
You will create a systemd service to run Wiki.js as a background service. That service helps you operate Wiki.js easier. Also, every time the operating system starts, it will automatically run Wiki.js.
Create a new file namedwikijs.service
inside the /etc/systemd/system
directory.
$ sudo nano /etc/systemd/system/wikijs.service
Paste the following contents:
[Unit]
Description=Wiki.js
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/node server
Restart=always
User=wikijs
Environment=NODE_ENV=production
WorkingDirectory=/var/www/wikijs
[Install]
WantedBy=multi-user.target
Save the service file and exit. Then reload systemd.
$ sudo systemctl daemon-reload
Enable the service on system boot.
$ sudo systemctl enable wikijs.service
Complete the Wiki.js Setup
Restart the server to see if everything is working fine.
$ sudo reboot
Wait a moment for the system to boot, then open the http://example.com link in your browser. You will see the Setup screen.
Enter your email and a strong password for your administrator account.
In the Site URL field, enter https://example.com if you have configured HTTPS, or enter http://example.com if not.
Click the Install button and wait for a while for Wiki.js to complete the installation. When finished, it redirects you to the Login screen.
Enter your credentials then click the Log In button.
Wiki.js is now ready, and you can create the home page.
You may want to read the Wiki.js User Guide to learn more about how to manage Wiki.js.


Our updated Privacy Policy explains what information we collect, how we use it, and the choices you have, including how to manage your privacy and cookies settings, access the information we have about you, and delete your account. We are committed to protecting consumer privacy online. We believe that greater protection of personal privacy on the Web will not only protect our users, but also increase users confidence and ultimately their participation in online activities. The purpose of our policy is to inform you about the types of information we gather about you when you visit our site, how we may use that information, whether we disclose it to anyone, and the choices you have regarding our use of the information. We strive to offer its visitors the many advantages of Internet technology and to provide an interactive and personalized experience.
● if you register with us (such as your date of birth, username, avatar, password and email address); ● information you provide by participating in any chats, communities or social media functions. We will consider that information as part of the public domain; ● information you provide us if you report a problem with our Services or App. How do we use your information?
To provide you the App and associated websites and continuously improve their features;
● To store your running-history;
● To provide helpdesk and support services;
● To customise the App which is available to you;
● To ensure that you are in compliance with our terms;
● To moderate any chat messages;


In Feburary 2011, I finally got tired of using MSBuild as a scripting language. There are great frameworks out there that make it bearable, but trying to use a build language to script and program is a recipe for disaster and bloated scripts.
I don’t know what finally motivated me to learn PowerShell. I ordered every PowerShell book from the library, but returned them as soon as I started Lee Holmes' PowerShell Cookbook. Within a few days, I was writing scripts. A year later, I have a hard time writing MSBuild.
I’m still kicking myself for waiting as long as I did. I had heard lots of respectable developers extol PowerShell, but I never set aside the time to learn it. What a waste.
 Take a deep breath, two days off, and read Lee Holmes' book. You’ll never look back.


This is the third post in a series reflecting on John Spencer’s Sages and Lunatics.
Most of the books are practical manuals on how to run a classroom. They offer quick, handy, time-saving ideas.
The time of the textbook has come and gone. Schools aren’t renewing subscriptions, moving instead to things like 1:1 programs or supplemental materials. Teachers are creating and sharing their own content on the Internet for anyone – including students – to find and use in their learning. Print isn’t dead, but its nature is changing.
At the beginning of Sages, John is lamenting the “Five Tips for [X]” nature of education materials in a bookstore.  There was some theory in there, but it was lacking any recognition of the relationships that are also required.
I’m worried that popular blog posts have become our new “Five Tips for [X].”
creative commons licensed ( BY-NC-ND ) flickr photo shared by ebayink
Is there value in the quick list (I believe the new term is listicle) approach? Sure there is. It can be helpful to see some quick ideas when you’re in a pinch. The problem comes when every resource decides to take that angle. Nowadays, our culture has become so obsessed with the hyperbolic-headline listicle that it’s started to happen in education blogs. We’re a culture with a fixitnow! mindset…we want to try things out, and if they don’t work immediately, we move on. Call it perseverance or tenacity, but have we lost something in the resources we look to use?
On the other hand, perhaps it is in the content, not necessarily the format. There can be significant wisdom in brevity. Perhaps the quick look is what we need in order to feel inspired to dive in a little deeper. I think the danger in bashing educational print is that much of it is reproduced online in blogs, and we praise the best “Top 5” or “Top 10” posts when they come from photons.
Whatever the case may be, let’s focus on sharing wisdom, sharing background, and sharing depth as we all work to improve.
Written on May 28th, 2014 by Brian Bennett Categorized in: All Teaching
Leave a comment


Kiwifruit (often abbreviated as kiwi), or Chinese gooseberry is the edible berry of several species of woody vines in the genus Actinidia.[1][2] The most common cultivar group of kiwifruit ('Hayward') is oval, about the size of a large hen's egg (5–8 cm (2.0–3.1 in) in length and 4.5–5.5 cm (1.8–2.2 in) in diameter). It has a fibrous, dull greenish-brown skin and bright green or golden flesh with rows of tiny, black, edible seeds. The fruit has a soft texture, with a sweet and unique flavor. China produced 56% of the world total of kiwifruit in 2016.
Price = {{ price | currency : "Rs."}}