It's somewhat weird, but it seems that Webkit, at least in newest stable version of Chrome, supports Microsoft's zoom
property. The good news is that its behaviour is closer to what you want.
Unfortunately DOM clientWidth
and similar properties still return the original values as if the image was not resized.
// hack: wait a moment for img to load_x000D_
setTimeout(function() {_x000D_
var img = document.getElementsByTagName("img")[0];_x000D_
document.getElementById("c").innerHTML = "clientWidth, clientHeight = " + img.clientWidth + ", " +_x000D_
img.clientHeight;_x000D_
}, 1000);
_x000D_
img {_x000D_
zoom: 50%;_x000D_
}_x000D_
/* -- not important below -- */_x000D_
#t {_x000D_
width: 400px;_x000D_
height: 300px;_x000D_
background-color: #F88;_x000D_
}_x000D_
#s {_x000D_
width: 200px;_x000D_
height: 150px;_x000D_
background-color: #8F8;_x000D_
}
_x000D_
<img src="data:image/png;base64,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" />_x000D_
<div id="s">div with explicit size for comparison 200px by 150px</div>_x000D_
<div id="t">div with explicit size for comparison 400px by 300px</div>_x000D_
<div id="c"></div>
_x000D_
The function export_fig on the MATLAB file exchange will crop the whitespace around an output PDF/EPS file by default when it exports a figure.
Sorry to rouse a really old thread, but I've been using jemdoc for a couple of years and it is really excellent.
Pay attention if you have a where clause on the "right side' table of a query containing a left outer join... In case you have no record on the right side satisfying the where clause, then the corresponding record of the 'left side' table will not appear in the result of your query....
You can use figure
to create a new plot, for example, or use close
after the first plot.
try{
BufferedReader br = new BufferedReader(new FileReader("textfile.txt"));
String strLine;
//Read File Line By Line
while ((strLine = br.readLine()) != null) {
// Print the content on the console
System.out.println (strLine);
}
//Close the input stream
in.close();
}catch (Exception e){//Catch exception if any
System.err.println("Error: " + e.getMessage());
}finally{
in.close();
}
This will read line by line,
If your no. are saperated by newline char. then in place of
System.out.println (strLine);
You can have
try{
int i = Integer.parseInt(strLine);
}catch(NumberFormatException npe){
//do something
}
If it is separated by spaces then
try{
String noInStringArr[] = strLine.split(" ");
//then you can parse it to Int as above
}catch(NumberFormatException npe){
//do something
}
You can do it with CSS only by creating your menu twice. It's not ideal but it gives you the opportunity have a different design for the menu once it's on top and you'll have nothing else than CSS, no jquery. Here is an example with DIV (you can of course change it to NAV if you prefer):
<div id="hiddenmenu">
THIS IS MY HIDDEN MENU
</div>
<div id="header">
Here is my header with a lot of text and my main menu
</div>
<div id="body">
MY BODY
</div>
And then have the following CSS:
#hiddenmenu {
position: fixed;
top: 0;
z-index:1;
}
#header {
top: 0;
position:absolute;
z-index:2;
}
#body {
padding-top: 80px;
position:absolute;
z-index: auto;
}
Here is a fiddle for you to see: https://jsfiddle.net/brghtk4z/1/
Reading xml the easy way:
http://www.mkyong.com/java/jaxb-hello-world-example/
package com.mkyong.core;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Customer {
String name;
int age;
int id;
public String getName() {
return name;
}
@XmlElement
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
@XmlElement
public void setAge(int age) {
this.age = age;
}
public int getId() {
return id;
}
@XmlAttribute
public void setId(int id) {
this.id = id;
}
}
.
package com.mkyong.core;
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
public class JAXBExample {
public static void main(String[] args) {
Customer customer = new Customer();
customer.setId(100);
customer.setName("mkyong");
customer.setAge(29);
try {
File file = new File("C:\\file.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
// output pretty printed
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(customer, file);
jaxbMarshaller.marshal(customer, System.out);
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
What I do when I mess up my local branch is I just rename my broken branch, and check out/branch the upstream branch again:
git branch -m branch branch-old
git fetch remote
git checkout -b branch remote/branch
Then if you're sure you don't want anything from your old branch, remove it:
git branch -D branch-old
But usually I leave the old branch around locally, just in case I had something in there.
Use the component:
<Route exact path="/details/:id" component={DetailsPage} />
And you should be able to access the id
using:
this.props.match.params.id
Inside the DetailsPage
component
Compare date only instead of date + time (NOW) with:
CURDATE()
In Unix systems the end of a line is represented with a line feed (LF). In windows a line is represented with a carriage return (CR) and a line feed (LF) thus (CRLF). when you get code from git that was uploaded from a unix system they will only have an LF.
If you are a single developer working on a windows machine, and you don't care that git automatically replaces LFs to CRLFs, you can turn this warning off by typing the following in the git command line
git config core.autocrlf true
If you want to make an intelligent decision how git should handle this, read the documentation
Here is a snippet
Formatting and Whitespace
Formatting and whitespace issues are some of the more frustrating and subtle problems that many developers encounter when collaborating, especially cross-platform. It’s very easy for patches or other collaborated work to introduce subtle whitespace changes because editors silently introduce them, and if your files ever touch a Windows system, their line endings might be replaced. Git has a few configuration options to help with these issues.
core.autocrlf
If you’re programming on Windows and working with people who are not (or vice-versa), you’ll probably run into line-ending issues at some point. This is because Windows uses both a carriage-return character and a linefeed character for newlines in its files, whereas Mac and Linux systems use only the linefeed character. This is a subtle but incredibly annoying fact of cross-platform work; many editors on Windows silently replace existing LF-style line endings with CRLF, or insert both line-ending characters when the user hits the enter key.
Git can handle this by auto-converting CRLF line endings into LF when you add a file to the index, and vice versa when it checks out code onto your filesystem. You can turn on this functionality with the core.autocrlf setting. If you’re on a Windows machine, set it to true – this converts LF endings into CRLF when you check out code:
$ git config --global core.autocrlf true
If you’re on a Linux or Mac system that uses LF line endings, then you don’t want Git to automatically convert them when you check out files; however, if a file with CRLF endings accidentally gets introduced, then you may want Git to fix it. You can tell Git to convert CRLF to LF on commit but not the other way around by setting core.autocrlf to input:
$ git config --global core.autocrlf input
This setup should leave you with CRLF endings in Windows checkouts, but LF endings on Mac and Linux systems and in the repository.
If you’re a Windows programmer doing a Windows-only project, then you can turn off this functionality, recording the carriage returns in the repository by setting the config value to false:
$ git config --global core.autocrlf false
What you're looking for are the scales for each zoom level. The numbers are in metres. Use these:
20 : 1128.497220
19 : 2256.994440
18 : 4513.988880
17 : 9027.977761
16 : 18055.955520
15 : 36111.911040
14 : 72223.822090
13 : 144447.644200
12 : 288895.288400
11 : 577790.576700
10 : 1155581.153000
9 : 2311162.307000
8 : 4622324.614000
7 : 9244649.227000
6 : 18489298.450000
5 : 36978596.910000
4 : 73957193.820000
3 : 147914387.600000
2 : 295828775.300000
1 : 591657550.500000
In that example, e
is just a parameter for that function, but it's the event
object that gets passed in through it.
win cmd
C:\>adb shell id
uid=2000(shell) gid=2000(shell)
C:\>adb shell 'su -c id'
/system/bin/sh: su -c id: inaccessible or not found
C:\>adb shell "su -c id"
uid=0(root) gid=0(root) groups=0(root) context=u:r:magisk:s0
C:\>adb shell su -c id
uid=0(root) gid=0(root) groups=0(root) context=u:r:magisk:s0
win msys bash
msys2@bash:~$ adb shell 'su -c id'
uid=0(root) gid=0(root) groups=0(root) context=u:r:magisk:s0
msys2@bash:~$ adb shell "su -c id"
uid=0(root) gid=0(root) groups=0(root) context=u:r:magisk:s0
msys2@bash:~$ adb shell su -c id
uid=0(root) gid=0(root) groups=0(root) context=u:r:magisk:s0
if want run am
cmd, -t
option maybe required:
C:\>adb shell su -c am stack list
cmd: Failure calling service activity: Failed transaction (2147483646)
C:\>adb shell -t su -c am stack list
Stack id=0 bounds=[0,0][1200,1920] displayId=0 userId=0
...
shell options:
shell [-e ESCAPE] [-n] [-Tt] [-x] [COMMAND...]
run remote shell command (interactive shell if no command given)
-e: choose escape character, or "none"; default '~'
-n: don't read from stdin
-T: disable pty allocation
-t: allocate a pty if on a tty (-tt: force pty allocation)
-x: disable remote exit codes and stdout/stderr separation
Android Debug Bridge version 1.0.41
Version 30.0.5-6877874
In case anyone stumbles with this problem again, the accepted solution did work for older versions of ionic and app scripts, I had used it many times in the past, but last week, after I updated some stuff, it got broken again, and this fix wasn't working anymore as this was already solved on the current version of app-scripts, most of the info is referred on this post https://forum.ionicframework.com/t/ionic-cordova-run-android-livereload-cordova-not-available/116790/18 but I'll make it short here:
First make sure you have this versions on your system
cli packages: (xxxx\npm\node_modules)
@ionic/cli-utils : 1.19.2 ionic (Ionic CLI) : 3.20.0
global packages:
cordova (Cordova CLI) : not installed
local packages:
@ionic/app-scripts : 3.1.9 Cordova Platforms : android 7.0.0 Ionic Framework : ionic-angular 3.9.2
System:
Node : v10.1.0 npm : 5.6.0
An this on your package.json
"@angular/cli": "^6.0.3", "@ionic/app-scripts": "^3.1.9", "typescript": "~2.4.2"
Now remove your platform with ionic cordova platform rm what-ever Then DELETE the node_modules and plugins folder and MAKE SURE the platform was deleted inside the platforms folder.
Finally, run
npm install ionic cordova platform add what-ever ionic cordova run
And everything should be working again
The simplest way is using libraries like google-http-java-client but if you want parse the JSON response by yourself you can do that in a multiple ways, you can use org.json, json-simple, Gson, minimal-json, jackson-mapper-asl (from 1.x)... etc
A set of simple examples:
Using Gson:
import java.io.IOException;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
public class Gson {
public static void main(String[] args) {
}
public HttpResponse http(String url, String body) {
try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
HttpPost request = new HttpPost(url);
StringEntity params = new StringEntity(body);
request.addHeader("content-type", "application/json");
request.setEntity(params);
HttpResponse result = httpClient.execute(request);
String json = EntityUtils.toString(result.getEntity(), "UTF-8");
com.google.gson.Gson gson = new com.google.gson.Gson();
Response respuesta = gson.fromJson(json, Response.class);
System.out.println(respuesta.getExample());
System.out.println(respuesta.getFr());
} catch (IOException ex) {
}
return null;
}
public class Response{
private String example;
private String fr;
public String getExample() {
return example;
}
public void setExample(String example) {
this.example = example;
}
public String getFr() {
return fr;
}
public void setFr(String fr) {
this.fr = fr;
}
}
}
Using json-simple:
import java.io.IOException;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
public class JsonSimple {
public static void main(String[] args) {
}
public HttpResponse http(String url, String body) {
try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
HttpPost request = new HttpPost(url);
StringEntity params = new StringEntity(body);
request.addHeader("content-type", "application/json");
request.setEntity(params);
HttpResponse result = httpClient.execute(request);
String json = EntityUtils.toString(result.getEntity(), "UTF-8");
try {
JSONParser parser = new JSONParser();
Object resultObject = parser.parse(json);
if (resultObject instanceof JSONArray) {
JSONArray array=(JSONArray)resultObject;
for (Object object : array) {
JSONObject obj =(JSONObject)object;
System.out.println(obj.get("example"));
System.out.println(obj.get("fr"));
}
}else if (resultObject instanceof JSONObject) {
JSONObject obj =(JSONObject)resultObject;
System.out.println(obj.get("example"));
System.out.println(obj.get("fr"));
}
} catch (Exception e) {
// TODO: handle exception
}
} catch (IOException ex) {
}
return null;
}
}
etc...
This usually happens in Python 3. One of the common reasons would be that while specifying your file path you need "\\" instead of "\". As in:
filePath = "C:\\User\\Desktop\\myFile"
For Python 2, just using "\" would work.
With C++11, you can write:
#include <string> // to use std::string, std::to_string() and "+" operator acting on strings
int i = 4;
std::string text = "Player ";
text += std::to_string(i);
If you are trying to decode a web image you can simply use this :
import base64
with open("imageToSave.png", "wb") as fh:
fh.write(base64.urlsafe_b64decode('data'))
data => is the encoded string
It will take care of the padding errors
In my legacy app Array.from of prototype js was conflicting with angular's Array.from that was causing this problem. I resolved it by saving angular's Array.from version and reassigning it after prototype load.
Additionally you will want to use the Environment Variables for your paths if at all possible: http://en.wikipedia.org/wiki/Environment_variable#Default_Values_on_Microsoft_Windows
E.G.
There are many more check out the link for a longer list.
MAX_EXECUTION_TIME is also an important parameter for long running queries.Will work for MySQL 5.7 or later.
Check the current value
SELECT @@GLOBAL.MAX_EXECUTION_TIME, @@SESSION.MAX_EXECUTION_TIME;
Then set it according to your needs.
SET SESSION MAX_EXECUTION_TIME=2000;
SET GLOBAL MAX_EXECUTION_TIME=2000;
Use this:
function get_millis(){
list($usec, $sec) = explode(' ', microtime());
return (int) ((int) $sec * 1000 + ((float) $usec * 1000));
}
Bye
I was just having this issue with my own program. I turned out that the value I was searching for was not in my reference table. I fixed my reference table, and then the error went away.
For a quality Node.js / JavaScript solution, see the id-shortener module, which is thoroughly tested and has been used in production for months.
It provides an efficient id / URL shortener backed by pluggable storage defaulting to Redis, and you can even customize your short id character set and whether or not shortening is idempotent. This is an important distinction that not all URL shorteners take into account.
In relation to other answers here, this module implements the Marcel Jackwerth's excellent accepted answer above.
The core of the solution is provided by the following Redis Lua snippet:
local sequence = redis.call('incr', KEYS[1])
local chars = '0123456789ABCDEFGHJKLMNPQRSTUVWXYZ_abcdefghijkmnopqrstuvwxyz'
local remaining = sequence
local slug = ''
while (remaining > 0) do
local d = (remaining % 60)
local character = string.sub(chars, d + 1, d + 1)
slug = character .. slug
remaining = (remaining - d) / 60
end
redis.call('hset', KEYS[2], slug, ARGV[1])
return slug
Kotlin example:
val inputMethodManager = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
from Fragment:
inputMethodManager.hideSoftInputFromWindow(activity?.currentFocus?.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)
from Activity:
inputMethodManager.hideSoftInputFromWindow(currentFocus?.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)
I believe you are trying to compare two strings representing values, the function you are looking for is:
int atoi(const char *nptr);
or
long int strtol(const char *nptr, char **endptr, int base);
these functions will allow you to convert a string to an int/long int:
int val = strtol("555", NULL, 10);
and compare it to another value.
int main (int argc, char *argv[])
{
long int val = 0;
if (argc < 2)
{
fprintf(stderr, "Usage: %s number\n", argv[0]);
exit(EXIT_FAILURE);
}
val = strtol(argv[1], NULL, 10);
printf("%d is %s than 555\n", val, val > 555 ? "bigger" : "smaller");
return 0;
}
How about the Dijit Calendar from the Dojo framework? It's pretty cool and very easy to implement. I always use this calendar.
https://www.dojotoolkit.org/reference-guide/dijit/Calendar.html
You could use querySelector()
with attribute selector '[attribute="value"]'
, then affect css rule using .style
, as you can see in the example below:
document.querySelector('a[aria-expanded="true"]').style.backgroundColor = "#42DCA3";
_x000D_
<ul><li class="active">_x000D_
<a href="#3a" class="btn btn-default btn-lg" data-toggle="tab" aria-expanded="true"> <span class="network-name">Google+ with aria expanded true</span></a>_x000D_
</li>_x000D_
<li>_x000D_
<a href="#3a" class="btn btn-default btn-lg" data-toggle="tab" aria-expanded="false"> <span class="network-name">Google+ with aria expanded false</span></a>_x000D_
</li>_x000D_
</ul>
_x000D_
jQuery solution :
If you want to use a jQuery solution you could simply use css()
method :
$('a[aria-expanded="true"]').css('background-color','#42DCA3');
Hope this helps.
Update: at least as early as 2013 (see Mubashar's comment) this started working.
According to Log4jXmlFormat you cannot configure it with log4j.properties, but only using the XML config format:
Note that TimeBasedRollingPolicy can only be configured with xml, not log4j.properties
Unfortunately, the example log4j.xml they provide doesn't work either:
log4j:ERROR Parsing error on line 14 and column 76
log4j:ERROR Element type "rollingPolicy" must be declared.
...
log4j:WARN Please set a rolling policy for the RollingFileAppender named 'FILE'
Use the is_user_logged_in
function:
if ( is_user_logged_in() ) {
// your code for logged in user
} else {
// your code for logged out user
}
We can make a function to manage return class with condition
<script>
angular.module('myapp', [])
.controller('ExampleController', ['$scope', function ($scope) {
$scope.MyColors = ['It is Red', 'It is Yellow', 'It is Blue', 'It is Green', 'It is Gray'];
$scope.getClass = function (strValue) {
switch(strValue) {
case "It is Red":return "Red";break;
case "It is Yellow":return "Yellow";break;
case "It is Blue":return "Blue";break;
case "It is Green":return "Green";break;
case "It is Gray":return "Gray";break;
}
}
}]);
</script>
And then
<body ng-app="myapp" ng-controller="ExampleController">
<h2>AngularJS ng-class if example</h2>
<ul >
<li ng-repeat="icolor in MyColors" >
<p ng-class="[getClass(icolor), 'b']">{{icolor}}</p>
</li>
</ul>
<hr/>
<p>Other way using : ng-class="{'class1' : expression1, 'class2' : expression2,'class3':expression2,...}"</p>
<ul>
<li ng-repeat="icolor in MyColors">
<p ng-class="{'Red':icolor=='It is Red','Yellow':icolor=='It is Yellow','Blue':icolor=='It is Blue','Green':icolor=='It is Green','Gray':icolor=='It is Gray'}" class="b">{{icolor}}</p>
</li>
</ul>
You can refer to full code page at ng-class if example
public static void main(String[] args) {
final String xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n"+
"<Emp id=\"1\"><name>Pankaj</name><age>25</age>\n"+
"<role>Developer</role><gen>Male</gen></Emp>";
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
try
{
builder = factory.newDocumentBuilder();
Document doc = builder.parse( new InputSource( new StringReader( xmlStr )) );
} catch (Exception e) {
e.printStackTrace();
}
}
My first post... UDF I managed quickly to compile. Usage: Select 3D range as normal and enclose is into quotation marks like below...
=CountIf3D("'StartSheet:EndSheet'!G16:G878";"Criteria")
Advisably sheets to be adjacent to avoid unanticipated results.
Public Function CountIf3D(SheetstoCount As String, CriteriaToUse As Variant)
Dim sStarSheet As String, sEndSheet As String, sAddress As String
Dim lColonPos As Long, lExclaPos As Long, cnt As Long
lColonPos = InStr(SheetstoCount, ":") 'Finding ':' separating sheets
lExclaPos = InStr(SheetstoCount, "!") 'Finding '!' separating address from the sheets
sStarSheet = Mid(SheetstoCount, 2, lColonPos - 2) 'Getting first sheet's name
sEndSheet = Mid(SheetstoCount, lColonPos + 1, lExclaPos - lColonPos - 2) 'Getting last sheet's name
sAddress = Mid(SheetstoCount, lExclaPos + 1, Len(SheetstoCount) - lExclaPos) 'Getting address
cnt = 0
For i = Sheets(sStarSheet).Index To Sheets(sEndSheet).Index
cnt = cnt + Application.CountIf(Sheets(i).Range(sAddress), CriteriaToUse)
Next
CountIf3D = cnt
End Function
Use this script instead:
@taskkill/f /im test.exe >nul 2>&1
@pause
What the 2>&1
part actually does, is that it redirects the stderr
output to stdout
. I will explain it better below:
Kill the task "test.exe". Redirect stderr
to stdout
. Then, redirect stdout
to nul
.
Show the pause message Press any key to continue . . .
until someone presses a key.
NOTE: The @
symbol is hiding the prompt for each command. You can save up to 8 bytes this way.
The shortest version of your script could be:
@taskkill/f /im test.exe >nul 2>&1&pause
The &
character is used for redirection the first time, and for separating the commands the second time.
An @
character is not needed twice in a line. This code is just 40 bytes, despite the one you've posted being 49 bytes! I actually saved 9 bytes. For a cleaner code look above.
We can use params
, new feature of the UI-Router:
API Reference / ui.router.state / $stateProvider
params
A map which optionally configures parameters declared in the url, or defines additional non-url parameters. For each parameter being configured, add a configuration object keyed to the name of the parameter.
See the part: "...or defines additional non-url parameters..."
So the state def would be:
$stateProvider
.state('home', {
url: "/home",
templateUrl: 'tpl.html',
params: { hiddenOne: null, }
})
Few examples form the doc mentioned above:
// define a parameter's default value
params: {
param1: { value: "defaultValue" }
}
// shorthand default values
params: {
param1: "defaultValue",
param2: "param2Default"
}
// param will be array []
params: {
param1: { array: true }
}
// handling the default value in url:
params: {
param1: {
value: "defaultId",
squash: true
} }
// squash "defaultValue" to "~"
params: {
param1: {
value: "defaultValue",
squash: "~"
} }
EXTEND - working example: http://plnkr.co/edit/inFhDmP42AQyeUBmyIVl?p=info
Here is an example of a state definition:
$stateProvider
.state('home', {
url: "/home",
params : { veryLongParamHome: null, },
...
})
.state('parent', {
url: "/parent",
params : { veryLongParamParent: null, },
...
})
.state('parent.child', {
url: "/child",
params : { veryLongParamChild: null, },
...
})
This could be a call using ui-sref:
<a ui-sref="home({veryLongParamHome:'Home--f8d218ae-d998-4aa4-94ee-f27144a21238'
})">home</a>
<a ui-sref="parent({
veryLongParamParent:'Parent--2852f22c-dc85-41af-9064-d365bc4fc822'
})">parent</a>
<a ui-sref="parent.child({
veryLongParamParent:'Parent--0b2a585f-fcef-4462-b656-544e4575fca5',
veryLongParamChild:'Child--f8d218ae-d998-4aa4-94ee-f27144a61238'
})">parent.child</a>
Check the example here
I know, this is not really a solution for your question, because you ask for
display + opacity
My approach solves a more general question, but maybe this was the background problem that should be solved by using display
in combination with opacity
.
My desire was to get the Element out of the way when it is not visible. This solution does exactly that: It moves the element out of the away, and this can be used for transition:
.child {
left: -2000px;
opacity: 0;
visibility: hidden;
transition: left 0s 0.8s, visibility 0s 0.8s, opacity 0.8s;
}
.parent:hover .child {
left: 0;
opacity: 1;
visibility: visible;
transition: left 0s, visibility 0s, opacity 0.8s;
}
This code does not contain any browser prefixes or backward compatibility hacks. It just illustrates the concept how the element is moved away as it is not needed any more.
The interesting part are the two different transition definitions. When the mouse-pointer is hovering the .parent
element the .child
element needs to be put in place immediately and then the opacity will be changed:
transition: left 0s, visibility 0s, opacity 0.8s;
When there is no hover, or the mouse-pointer was moved off the element, one has to wait until the opacity change has finished before the element can be moved off screen:
transition: left 0s 0.8s, visibility 0s 0.8s, opacity 0.8s;
Moving the object away will be a viable alternative in a case where setting display:none
would not break the layout.
I hope I hit the nail on the head for this question although I did not answer it.
os.remove()
removes a file.
os.rmdir()
removes an empty directory.
shutil.rmtree()
deletes a directory and all its contents.
Path
objects from the Python 3.4+ pathlib
module also expose these instance methods:
pathlib.Path.unlink()
removes a file or symbolic link.
pathlib.Path.rmdir()
removes an empty directory.
Although it's not safest, but you can change in the source code. navigate to Python/2.7/site-packages/django/conf/urls/static.py
Then edit like following:
if settings.DEBUG or (prefix and '://' in prefix):
So then if settings.debug==False
it won't effect on the code, also after running try python manage.py runserver --runserver
to run static files.
NOTE: Information should only be used for testing only
As the file object reads the file, it uses a pointer to keep track of where it is. If you read part of the file, then go back to it later it will pick up where you left off. If you read the whole file, and go back to the same file object, it will be like reading an empty file because the pointer is at the end of the file and there is nothing left to read. You can use file.tell()
to see where in the file the pointer is and file.seek
to set the pointer. For example:
>>> file = open('myfile.txt')
>>> file.tell()
0
>>> file.readline()
'one\n'
>>> file.tell()
4L
>>> file.readline()
'2\n'
>>> file.tell()
6L
>>> file.seek(4)
>>> file.readline()
'2\n'
Also, you should know that file.readlines()
reads the whole file and stores it as a list. That's useful to know because you can replace:
for line in file.readlines():
#do stuff
file.seek(0)
for line in file.readlines():
#do more stuff
with:
lines = file.readlines()
for each_line in lines:
#do stuff
for each_line in lines:
#do more stuff
You can also iterate over a file, one line at a time, without holding the whole file in memory (this can be very useful for very large files) by doing:
for line in file:
#do stuff
Make sure the context you build your image with is set correctly. You can set the context when building as an argument.
Example:
docker build -f ./Dockerfile ..
where '..' is the context in this example.
git log ..otherbranch
git diff ...otherbranch
gitk ...otherbranch
Empty string implies HEAD
, so that's why just ..otherbranch
instead of HEAD..otherbranch
.
The two vs. three dots have slightly different meaning for diff than for the commands that list revisions (log, gitk etc.). For log and others two dots (a..b
) means everything that is in b
but not a
and three dots (a...b
) means everything that is in only one of a
or b
. But diff works with two revisions and there the simpler case represented by two dots (a..b
) is simple difference from a
to b
and three dots (a...b
) mean difference between common ancestor and b
(git diff $(git merge-base a b)..b
).
On ubuntu
sudo apt-get install librxtx-java then
add RXTX jars to the project which are in
usr/share/java
Found another answer from the npmjs.org
https://www.npmjs.com/package/cordova-plugin-update
Basically its installing the tool into your project:
npm install -g cordova-plugin-update
when done you then have to run the command
cordova-plugin-update
and it will prompt you to update if ever a newer version of a plugin is available
As it's been mentioned in the question, it's hard to define the 80 column temp table before executing the stored procedure.
So the other way around this is to populate the table based on the stored procedure result set.
SELECT * INTO #temp FROM OPENROWSET('SQLNCLI', 'Server=localhost;Trusted_Connection=yes;'
,'EXEC MyStoredProc')
If you are getting any error, you need to enable ad hoc distributed queries by executing following query.
sp_configure 'Show Advanced Options', 1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO
To execute sp_configure
with both parameters to change a configuration option or to run the RECONFIGURE
statement, you must be granted the ALTER SETTINGS
server-level permission
Now you can select your specific columns from the generated table
SELECT col1, col2
FROM #temp
From here:
http://www.christianengvall.se/undo-pushed-merge-git/
git revert -m 1 <merge commit hash>
Git revert adds a new commit that rolls back the specified commit.
Using -m 1 tells it that this is a merge and we want to roll back to the parent commit on the master branch. You would use -m 2 to specify the develop branch.
Here, Role is an enum which contains the following values [ADMIN, USER, OTHER].
List<Role> roleList = Arrays.asList(Role.values());
roleList.forEach(role -> {
System.out.println(role);
});
This works reliably for me in my main sub.
Dim defDate1 As Date, defDate2 As Date
'** Set default date range to previous month
defDate1 = CDate(Month(Now) & "/1/" & Year(Now))
defDate1 = DateAdd("m", -1, defDate1)
defDate2 = DateAdd("d", -1, DateAdd("m", 1, defDate1))
It is very important that AJAX requests retain session. The easiest example is when you try to do an AJAX request for the admin panel, let's say. Of course that you will protect the page that you make the request to, not to accessible by others who don't have the session you get after administrator login. Makes sense?
dynamically typed language helps to quickly prototype algorithm concepts without the overhead of about thinking what variable types need to be used (which is a necessity in statically typed language).
Seems you are looking for ORDER BY
in DESC
ending order with LIMIT clause:
SELECT
*
FROM
scores
ORDER BY score DESC
LIMIT 10
Of course SELECT *
could seriously affect performance, so use it with caution.
From react docs Passing arguments to event handlers
<button onClick={(e) => this.deleteRow(id, e)}>Delete Row</button>
<button onClick={this.deleteRow.bind(this, id)}>Delete Row</button>
To achieve a consistent result cross browser, you would usually add another div
inside the div
and give that no explicit width, and a margin
. The margin
will simulate padding
for the outer div.
View types implementation becomes easier with kotlin, here is a sample with this light library https://github.com/Link184/KidAdapter
recyclerView.setUp {
withViewType {
withLayoutResId(R.layout.item_int)
withItems(mutableListOf(1, 2, 3, 4, 5, 6))
bind<Int> { // this - is adapter view hoder itemView, it - current item
intName.text = it.toString()
}
}
withViewType("SECOND_STRING_TAG") {
withLayoutResId(R.layout.item_text)
withItems(mutableListOf("eight", "nine", "ten", "eleven", "twelve"))
bind<String> {
stringName.text = it
}
}
}
In my case, while copying the text from other source it somehow included the space at the end of clipboard entry. That way the key password had a space at the end.
The Answer by McDowell is correct one. However if you try other suggestion in few of the posts above.
HttpEntity responseEntity = httpResponse.getEntity();
if(responseEntity!=null) {
response = EntityUtils.toString(responseEntity);
S.O.P (response);
}
Then it will give you illegalStateException stating that content is already consumed.
to send over gmail, you need to use an encrypted connection. this is not possible with telnet alone, but you can use tools like openssl
either connect using the starttls option in openssl to convert the plain connection to encrypted...
openssl s_client -starttls smtp -connect smtp.gmail.com:587 -crlf -ign_eof
or connect to a ssl sockect directly...
openssl s_client -connect smtp.gmail.com:465 -crlf -ign_eof
EHLO localhost
after that, authenticate to the server using the base64 encoded username/password
AUTH PLAIN AG15ZW1haWxAZ21haWwuY29tAG15cGFzc3dvcmQ=
to get this from the commandline:
echo -ne '\[email protected]\00password' | base64
AHVzZXJAZ21haWwuY29tAHBhc3N3b3Jk
then continue with "mail from:" like in your example
example session:
openssl s_client -connect smtp.gmail.com:465 -crlf -ign_eof
[... lots of openssl output ...]
220 mx.google.com ESMTP m46sm11546481eeh.9
EHLO localhost
250-mx.google.com at your service, [1.2.3.4]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH
250 ENHANCEDSTATUSCODES
AUTH PLAIN AG5pY2UudHJ5QGdtYWlsLmNvbQBub2l0c25vdG15cGFzc3dvcmQ=
235 2.7.0 Accepted
MAIL FROM: <[email protected]>
250 2.1.0 OK m46sm11546481eeh.9
rcpt to: <[email protected]>
250 2.1.5 OK m46sm11546481eeh.9
DATA
354 Go ahead m46sm11546481eeh.9
Subject: it works
yay!
.
250 2.0.0 OK 1339757532 m46sm11546481eeh.9
quit
221 2.0.0 closing connection m46sm11546481eeh.9
read:errno=0
For regular Windows users who are not skilled with computers, it is practically not possible to install and use extensions from outside the Chrome Web Store.
Users of other operating systems (Linux, Mac, Chrome OS) can easily install unpacked extensions (in developer mode).
Windows users can also load an unpacked extension, but they will always see an information bubble with "Disable developer mode extensions" when they start Chrome or open a new incognito window, which is really annoying. The only way for Windows users to use unpacked extensions without such dialogs is to switch to Chrome on the developer channel, by installing https://www.google.com/chrome/browser/index.html?extra=devchannel#eula.
Extensions can be loaded in unpacked mode by following the following steps:
chrome://extensions
(via omnibox or menu -> Tools -> Extensions).If you have a crx
file, then it needs to be extracted first. CRX files are zip files with a different header. Any capable zip program should be able to open it. If you don't have such a program, I recommend 7-zip.
These steps will work for almost every extension, except extensions that rely on their extension ID. If you use the previous method, you will get an extension with a random extension ID. If it is important to preserve the extension ID, then you need to know the public key of your CRX file and insert this in your manifest.json. I have previously given a detailed explanation on how to get and use this key at https://stackoverflow.com/a/21500707.
I found a solution: use :hover
with cursor: pointer
if nothing else helps.
I think this will work for you:
function makeid(length) {_x000D_
var result = '';_x000D_
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';_x000D_
var charactersLength = characters.length;_x000D_
for ( var i = 0; i < length; i++ ) {_x000D_
result += characters.charAt(Math.floor(Math.random() * charactersLength));_x000D_
}_x000D_
return result;_x000D_
}_x000D_
_x000D_
console.log(makeid(5));
_x000D_
<title>Registration Form</title>
<script>
var table;
function check() {
debugger;
var name = document.myForm.name.value;
if (name == "" || name == null) {
document.getElementById("span1").innerHTML = "Please enter the Name";
document.myform.name.focus();
document.getElementById("name").style.border = "2px solid red";
return false;
}
else {
document.getElementById("span1").innerHTML = "";
document.getElementById("name").style.border = "2px solid green";
}
var age = document.myForm.age.value;
var ageFormat = /^(([1][8-9])|([2-5][0-9])|(6[0]))$/gm;
if (age == "" || age == null) {
document.getElementById("span2").innerHTML = "Please provide Age";
document.myForm.age.focus();
document.getElementById("age").style.border = "2px solid red";
return false;
}
else if (!ageFormat.test(age)) {
document.getElementById("span2").innerHTML = "Age can't be leass than 18 and greater than 60";
document.myForm.age.focus();
document.getElementById("age").style.border = "2px solid red";
return false;
}
else {
document.getElementById("span2").innerHTML = "";
document.getElementById("age").style.border = "2px solid green";
}
var password = document.myForm.password.value;
if (document.myForm.password.length < 6) {
alert("Error: Password must contain at least six characters!");
document.myForm.password.focus();
document.getElementById("password").style.border = "2px solid red";
return false;
}
re = /[0-9]/g;
if (!re.test(password)) {
alert("Error: password must contain at least one number (0-9)!");
document.myForm.password.focus();
document.getElementById("password").style.border = "2px solid red";
return false;
}
re = /[a-z]/g;
if (!re.test(password)) {
alert("Error: password must contain at least one lowercase letter (a-z)!");
document.myForm.password.focus();
document.getElementById("password").style.border = "2px solid red";
return false;
}
re = /[A-Z]/g;
if (!re.test(password)) {
alert("Error: password must contain at least one uppercase letter (A-Z)!");
document.myForm.password.focus();
document.getElementById("password").style.border = "2px solid red";
return false;
}
re = /[$&+,:;=?@#|'<>.^*()%!-]/g;
if (!re.test(password)) {
alert("Error: password must contain at least one special character!");
document.myForm.password.focus();
document.getElementById("password").style.border = "2px solid red";
return false;
}
else {
document.getElementById("span3").innerHTML = "";
document.getElementById("password").style.border = "2px solid green";
}
if (document.getElementById("data") == null)
createTable();
else {
appendRow();
}
return true;
}
function createTable() {
var myTableDiv = document.getElementById("myTable"); //indiv
table = document.createElement("TABLE"); //TABLE??
table.setAttribute("id", "data");
table.border = '1';
myTableDiv.appendChild(table); //appendChild() insert it in the document (table --> myTableDiv)
debugger;
var header = table.createTHead();
var th0 = table.tHead.appendChild(document.createElement("th"));
th0.innerHTML = "Name";
var th1 = table.tHead.appendChild(document.createElement("th"));
th1.innerHTML = "Age";
appendRow();
}
function appendRow() {
var name = document.myForm.name.value;
var age = document.myForm.age.value;
var rowCount = table.rows.length;
var row = table.insertRow(rowCount);
row.insertCell(0).innerHTML = name;
row.insertCell(1).innerHTML = age;
clearForm();
}
function clearForm() {
debugger;
document.myForm.name.value = "";
document.myForm.password.value = "";
document.myForm.age.value = "";
}
function restrictCharacters(evt) {
evt = (evt) ? evt : window.event;
var charCode = (evt.which) ? evt.which : evt.keyCode;
if (((charCode >= '65') && (charCode <= '90')) || ((charCode >= '97') && (charCode <= '122')) || (charCode == '32')) {
return true;
}
else {
return false;
}
}
</script>
<div>
<form name="myForm">
<table id="tableid">
<tr>
<th>Name</th>
<td>
<input type="text" name="name" placeholder="Name" id="name" onkeypress="return restrictCharacters(event);" /></td>
<td><span id="span1"></span></td>
</tr>
<tr>
<th>Age</th>
<td>
<input type="text" onkeypress="return event.charCode === 0 || /\d/.test(String.fromCharCode(event.charCode));" placeholder="Age"
name="age" id="age" /></td>
<td><span id="span2"></span></td>
</tr>
<tr>
<th>Password</th>
<td>
<input type="password" name="password" id="password" placeholder="Password" /></td>
<td><span id="span3"></span></td>
</tr>
<tr>
<td></td>
<td>
<input type="button" value="Submit" onclick="check();" /></td>
<td>
<input type="reset" name="Reset" /></td>
</tr>
</table>
</form>
<div id="myTable">
</div>
</div>
I issued sudo chmod 700 ~/.ssh
and chmod 600 ~/.ssh/authorized_keys
and chmod go-w $HOME $HOME/.ssh
from a previous answer and it fixed my problem on a CentOS 7 box that I had messed up the permissions on while trying to get Samba shares working.
The simple solution using geom_abline
:
geom_abline(slope = coef(data.lm)[[2]], intercept = coef(data.lm)[[1]])
Where data.lm
is an lm
object, and coef(data.lm)
looks something like this:
> coef(data.lm)
(Intercept) DepDelay
-2.006045 1.025109
The numeric indexing assumes that (Intercept)
is listed first, which is the case if the model includes an intercept. If you have some other linear model object, just plug in the slope and intercept values similarly.
As long as you specify a width on the element, it should wrap itself without needing anything else.
The function var_export returns a string representation of a variable, so you could do this:
var_export($res, true);
The second argument tells the function to return the string instead of echoing it.
Basically, you check if an object is an instance of a specific class. You normally use it, when you have a reference or parameter to an object that is of a super class or interface type and need to know whether the actual object has some other type (normally more concrete).
Example:
public void doSomething(Number param) {
if( param instanceof Double) {
System.out.println("param is a Double");
}
else if( param instanceof Integer) {
System.out.println("param is an Integer");
}
if( param instanceof Comparable) {
//subclasses of Number like Double etc. implement Comparable
//other subclasses might not -> you could pass Number instances that don't implement that interface
System.out.println("param is comparable");
}
}
Note that if you have to use that operator very often it is generally a hint that your design has some flaws. So in a well designed application you should have to use that operator as little as possible (of course there are exceptions to that general rule).
$('div[id ^= "player_"]');
This worked for me..select all Div starts with "players_" keyword and display it.
No need to activate or selection sheets or cells if you're using VBA. You can access it all directly. The code:
Dim rng As Range
For Each rng In Sheets("Feuil2").Range("A1:A333")
Sheets("Classeur2.csv").Cells(rng.Value, rng.Offset(, 1).Value) = "1"
Next rng
is producing the same result as Joe's code.
If you need to switch sheets for some reasons, use Application.ScreenUpdating = False
at the beginning of your macro (and Application.ScreenUpdating=True
at the end). This will remove the screenflickering - and speed up the execution.
mysql_config_editor set --login-path=storedPasswordKey --host=localhost --user=root --password
How do I execute a command line with a secure password?? use the config editor!!!
As of mysql 5.6.6 you can store the password in a config file and then execute cli commands like this....
mysql --login-path=storedPasswordKey ....
--login-path replaces variables... host, user AND password. excellent right!
Try this
'''
This is a multiline
comment. I can type here whatever I want.
'''
Python does have a multiline string/comment syntax in the sense that unless used as docstrings, multiline strings generate no bytecode -- just like #-prepended comments. In effect, it acts exactly like a comment.
On the other hand, if you say this behavior must be documented in the official docs to be a true comment syntax, then yes, you would be right to say it is not guaranteed as part of the language specification.
In any case your editor should also be able to easily comment-out a selected region (by placing a # in front of each line individually). If not, switch to an editor that does.
Programming in Python without certain text editing features can be a painful experience. Finding the right editor (and knowing how to use it) can make a big difference in how the Python programming experience is perceived.
Not only should the editor be able to comment-out selected regions, it should also be able to shift blocks of code to the left and right easily, and should automatically place the cursor at the current indentation level when you press Enter. Code folding can also be useful.
If you are using VSCode
and Windows
.
1.Press Control + Shift + F
.
2.Find Your Package Name
and Replace All
with your new Package Name
.
type "cd android"
type "./gradlew clean"
AsyncTask is very helpful!
class QueryBibleDetail extends AsyncTask<Integer, Integer, String>{
private Activity activity;
private ProgressDialog dialog;
private Context context;
public QueryBibleDetail(Activity activity){
this.activity = activity;
this.context = activity;
this.dialog = new ProgressDialog(activity);
this.dialog.setTitle("????");
this.dialog.setMessage("????:"+tome+chapterID+":"+sectionFromID+"-"+sectionToID);
if(!this.dialog.isShowing()){
this.dialog.show();
}
}
@Override
protected String doInBackground(Integer... params) {
Log.d(TAG,"??doInBackground");
publishProgress(params[0]);
if(sectionFromID > sectionToID){
return "";
}
String queryBible = "action=query_bible&article="+chapterID+"&id="+tomeID+"&verse_start="+sectionFromID+"&verse_stop="+sectionToID+"";
try{
String bible = (Json.getRequest(HOST+queryBible)).trim();
bible = android.text.Html.fromHtml(bible).toString();
return bible;
}catch(Exception e){
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String bible){
Log.d(TAG,"??onPostExecute");
TextView bibleBox = (TextView) findViewById(R.id.bibleBox);
bibleBox.setText(bible);
this.dialog.dismiss();
}
}
This will work in the latest Xcode.
-(UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath {
cell.backgroundColor = [UIColor grayColor];
}
Use Array.prototype.filter()
function.
DEMO: https://jsfiddle.net/sumitridhal/r0cz0w5o/4/
JSON
var jsonObj =[
{
"name": "Me",
"info": {
"age": "15",
"favColor": "Green",
"pets": true
}
},
{
"name": "Alex",
"info": {
"age": "16",
"favColor": "orange",
"pets": false
}
},
{
"name": "Kyle",
"info": {
"age": "15",
"favColor": "Blue",
"pets": false
}
}
];
FILTER
var getPerson = function(name){
return jsonObj.filter(function(obj) {
return obj.name === name;
});
}
Always use EntityFunctions.TruncateTime() for both x.DateTimeStart and currentDate. such as :
var eventsCustom = eventCustomRepository.FindAllEventsCustomByUniqueStudentReference(userDevice.UniqueStudentReference).Where(x => EntityFunctions.TruncateTime(x.DateTimeStart) == EntityFunctions.TruncateTime(currentDate));
UIAlertController * alert = [UIAlertController
alertControllerWithTitle:@"Are you sure you want to logout?"
message:@""
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* yesButton = [UIAlertAction
actionWithTitle:@"Logout"
style:UIAlertActionStyleDestructive
handler:^(UIAlertAction * action)
{
}];
UIAlertAction* noButton = [UIAlertAction
actionWithTitle:@"Cancel"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
//Handle no, thanks button
}];
[alert addAction:noButton];
[alert addAction:yesButton];
[self presentViewController:alert animated:YES completion:nil];
The following calculates the mouse position relation to the canvas element:
var example = document.getElementById('example');
example.onmousemove = function(e) {
var x = e.pageX - this.offsetLeft;
var y = e.pageY - this.offsetTop;
}
In this example, this
refers to the example
element, and e
is the onmousemove
event.
<>
is equal to !=
i.e, both are used to represent the NOT EQUAL operation. For instance, email <> ''
and email != ''
are same.
The situation has changed since writing this answer: now that Firefox has added support in version 22, all major browsers now support accessing the clipboard data in a paste event. See Nico Burns's answer for an example.
In the past this was not generally possible in a cross-browser way. The ideal would be to be able to get the pasted content via the paste
event, which is possible in recent browsers but not in some older browsers (in particular, Firefox < 22).
When you need to support older browsers, what you can do is quite involved and a bit of a hack that will work in Firefox 2+, IE 5.5+ and WebKit browsers such as Safari or Chrome. Recent versions of both TinyMCE and CKEditor use this technique:
designMode
off and call focus()
on the textarea, thus moving the caret and effectively redirecting the pastedesignMode
back on, restores the user selection and pastes the text in.Note that this will only work for keyboard paste events and not pastes from the context or edit menus. By the time the paste event fires, it's too late to redirect the caret into the textarea (in some browsers, at least).
In the unlikely event that you need to support Firefox 2, note that you'll need to place the textarea in the parent document rather than the WYSIWYG editor iframe's document in that browser.
The document for string::npos
says:
npos is a static member constant value with the greatest possible value for an element of type size_t.
As a return value it is usually used to indicate failure.
This constant is actually defined with a value of -1 (for any trait), which because size_t is an unsigned integral type, becomes the largest possible representable value for this type.
you can use String format to include variables within strings
i use this code to include 2 variable in string:
String myString = String.format("this is my string %s %2d", variable1Name, variable2Name);
Have you tried redirecting all three I/O streams:
nohup ./yourprogram > foo.out 2> foo.err < /dev/null &
If you use Fedora, in order to generate core dump file in the same directory of binary file:
echo "core.%e.%p" > /proc/sys/kernel/core_pattern
And
ulimit -c unlimited
If using Visual Studio 2010 you can right-click on the project for the service, and select properties
. Then select the Web
tab. Under the Servers
section you can configure the URL. There is also a button to create the virtual directory.
I'm using Version 12 of IntelliJ.
I solved a similar problem by creating an entirely new project and "Checking out from Version Control" Merging the two projects later was fairly easy.
Are you looking at the designer or code view? You can force the designer to open by right clicking on your EDMX file and selecting Open With -> ADO.NET Entity Data Model Designer
Right click on the designer surface of the EDMX designer and click Update Model From Database...
All entities are refreshed by default, new entities are only added if you select them.
EDIT: If it is not refreshing well.
Why don't u use:
<script>
$('input').keyup(function(){
if(($('#eng').val().length > 0) && ($('#spa').val().length > 0))
$("#submit").prop('disabled', false);
else
$("#submit").prop('disabled', true);
});
</script>
Then delete the onkeyup function on the input.
If you are running on a x86 or x86_64 processor, the big endian is native. so
for 16 bit values
unsigned short wBigE = value;
unsigned short wLittleE = ((wBigE & 0xFF) << 8) | (wBigE >> 8);
for 32 bit values
unsigned int iBigE = value;
unsigned int iLittleE = ((iBigE & 0xFF) << 24)
| ((iBigE & 0xFF00) << 8)
| ((iBigE >> 8) & 0xFF00)
| (iBigE >> 24);
This isn't the most efficient solution unless the compiler recognises that this is byte level manipulation and generates byte swapping code. But it doesn't depend on any memory layout tricks and can be turned into a macro pretty easily.
There are several ways to do this:
$collection = Mage::getModel('...')
->getCollection()
->setPageSize(20)
->setCurPage(1);
Will get first 20 records.
Here is the alternative and maybe more readable way:
$collection = Mage::getModel('...')->getCollection();
$collection->getSelect()->limit(20);
This will call Zend Db limit. You can set offset as second parameter.
I think I found it. All you have to do is type in "`n" (WITH THE QUOTATION MARKS!)
Thanks!
Practically every PC in the world sells with at least one JavaScript interpreter installed on it.
Most (but not "practically all") PCs have a Java VM installed.
It is better to avoid writing out temporary spool files. Use a PL/SQL block. You can run this from SQL*Plus or put this thing into a package or procedure. The join to USER_TABLES is there to avoid view constraints.
It's unlikely that you really want to disable all constraints (including NOT NULL, primary keys, etc). You should think about putting constraint_type in the WHERE clause.
BEGIN
FOR c IN
(SELECT c.owner, c.table_name, c.constraint_name
FROM user_constraints c, user_tables t
WHERE c.table_name = t.table_name
AND c.status = 'ENABLED'
AND NOT (t.iot_type IS NOT NULL AND c.constraint_type = 'P')
ORDER BY c.constraint_type DESC)
LOOP
dbms_utility.exec_ddl_statement('alter table "' || c.owner || '"."' || c.table_name || '" disable constraint ' || c.constraint_name);
END LOOP;
END;
/
Enabling the constraints again is a bit tricker - you need to enable primary key constraints before you can reference them in a foreign key constraint. This can be done using an ORDER BY on constraint_type. 'P' = primary key, 'R' = foreign key.
BEGIN
FOR c IN
(SELECT c.owner, c.table_name, c.constraint_name
FROM user_constraints c, user_tables t
WHERE c.table_name = t.table_name
AND c.status = 'DISABLED'
ORDER BY c.constraint_type)
LOOP
dbms_utility.exec_ddl_statement('alter table "' || c.owner || '"."' || c.table_name || '" enable constraint ' || c.constraint_name);
END LOOP;
END;
/
FloatingActionButton
extends ImageView
. So, it's simple as like introducing an ImageView
in your layout. Here is an XML sample.
<android.support.design.widget.FloatingActionButton xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/somedrawable"
android:layout_gravity="right|bottom"
app:borderWidth="0dp"
app:rippleColor="#ffffff"/>
app:borderWidth="0dp"
is added as a workaround for elevation issues.
If you want to add item to the beginning of the collection you can use prepend:
$item->prepend($product, 'key');
If you want the threads to stop when your program exits (as implied by your example), then make them daemon threads.
If you want your threads to die on command, then you have to do it by hand. There are various methods, but all involve doing a check in your thread's loop to see if it's time to exit (see Nix's example).
Here is how I did it:
CSS:
.my-flex-card > div > div.card {
height: calc(100% - 15px);
margin-bottom: 15px;
}
HTML:
<div class="row my-flex-card">
<div class="col-lg-3 col-sm-6">
<div class="card">
<div class="card-block">
aaaa
</div>
</div>
</div>
<div class="col-lg-3 col-sm-6">
<div class="card">
<div class="card-block">
bbbb
</div>
</div>
</div>
<div class="col-lg-3 col-sm-6">
<div class="card">
<div class="card-block">
cccc
</div>
</div>
</div>
<div class="col-lg-3 col-sm-6">
<div class="card">
<div class="card-block">
dddd
</div>
</div>
</div>
</div>
I had this problem, and when I had android:text="< Go back"
it had the correct syntax highlighting, but then I realized it's the <
symbol that is messing everything up.
I very much like this answer which uses attached properties to mediate the behavior. However, I found that answer's implementation overly complicated, and it also doesn't address the secondary goal of preventing the window from being closed even with Alt+F4. So I offer this alternative:
enum CloseButtonVisibility
{
Visible,
Hidden,
CloseDisabled,
}
static class WindowEx
{
private static readonly CancelEventHandler _cancelCloseHandler = (sender, e) => e.Cancel = true;
public static readonly DependencyProperty CloseButtonVisibilityProperty =
DependencyProperty.RegisterAttached(
"CloseButtonVisibility",
typeof(CloseButtonVisibility),
typeof(WindowEx),
new FrameworkPropertyMetadata(CloseButtonVisibility.Visible, new PropertyChangedCallback(_OnCloseButtonChanged)));
[AttachedPropertyBrowsableForType(typeof(Window))]
public static CloseButtonVisibility GetCloseButtonVisibility(Window obj)
{
return (CloseButtonVisibility)obj.GetValue(CloseButtonVisibilityProperty);
}
[AttachedPropertyBrowsableForType(typeof(Window))]
public static void SetCloseButtonVisibility(Window obj, CloseButtonVisibility value)
{
obj.SetValue(CloseButtonVisibilityProperty, value);
}
private static void _OnCloseButtonChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (!(d is Window window))
{
return;
}
if (e.OldValue is CloseButtonVisibility oldVisibility)
{
if (oldVisibility == CloseButtonVisibility.CloseDisabled)
{
window.Closing -= _cancelCloseHandler;
}
}
if (e.NewValue is CloseButtonVisibility newVisibility)
{
if (newVisibility == CloseButtonVisibility.CloseDisabled)
{
window.Closing += _cancelCloseHandler;
}
if (!window.IsLoaded)
{
// NOTE: if the property is set multiple times before the window is loaded,
// the window will wind up with multiple event handlers. But they will all
// set the same value, so this is fine from a functionality point of view.
//
// The handler is never unsubscribed, so there is some nominal overhead there.
// But it would be incredibly unusual for this to be set more than once
// before the window is loaded, and even a handful of delegate instances
// being around that are no longer needed is not really a big deal.
window.Loaded += _ApplyCloseButtonVisibility;
}
else
{
_SetVisibility(window, newVisibility);
}
}
}
#region Win32 imports
private const int GWL_STYLE = -16;
private const int WS_SYSMENU = 0x80000;
[DllImport("user32.dll", SetLastError = true)]
private static extern int GetWindowLong(IntPtr hWnd, int nIndex);
[DllImport("user32.dll")]
private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
#endregion
private static void _ApplyCloseButtonVisibility(object sender, RoutedEventArgs e)
{
Window window = (Window)sender;
CloseButtonVisibility visibility = GetCloseButtonVisibility(window);
_SetVisibility(window, visibility);
}
private static void _SetVisibility(Window window, CloseButtonVisibility visibility)
{
var hwnd = new WindowInteropHelper(window).Handle;
if (visibility == CloseButtonVisibility.Visible)
{
SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) | WS_SYSMENU);
}
else
{
SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & ~WS_SYSMENU);
}
}
}
This provides three states to choose from:
Note that by default, a window that is never closed will prevent a WPF program's process from terminating. So if you choose to use the CloseButtonVisibility.CloseDisabled
value, you will need to either customize the Application.Run()
behavior, or re-enable closing of the window before exiting. E.g. in your main window, you might have something like this:
protected override void OnClosed(EventArgs e)
{
WindowEx.SetCloseButtonVisibility(this.toolWindow.Value, CloseButtonVisibility.Hidden);
this.toolWindow.Value.Close();
base.OnClosed(e);
}
where toolWindow
is the Window
reference for the window with the close button disabled.
The above assumes that the window is normally just hidden and shown as needed during the normal UI activity. Of course, you can also choose to close the window explicitly at any time, but the same technique — setting the option to not disable closing, and then explicitly closing the window — would still apply.
In addition to the answers already given, if you want to create a new directory, you could use this function:
def mkdir_p(mypath):
'''Creates a directory. equivalent to using mkdir -p on the command line'''
from errno import EEXIST
from os import makedirs,path
try:
makedirs(mypath)
except OSError as exc: # Python >2.5
if exc.errno == EEXIST and path.isdir(mypath):
pass
else: raise
and then:
import matplotlib
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(range(100))
# Create new directory
output_dir = "some/new/directory"
mkdir_p(output_dir)
fig.savefig('{}/graph.png'.format(output_dir))
For me my forked branch was not in sync with the master branch. So I went to bitbucket and synced and merged my forked branch and then tried to take the pull. Then it worked fine.
I am breaking the news to you. You CAN'T send an email with JavaScript per se.
Based on the context of the OP's question, my answer above does not hold true anymore as pointed out by @KennyEvitt in the comments. Looks like you can use JavaScript as an SMTP client.
However, I have not digged deeper to find out if it's secure & cross-browser compatible enough. So, I can neither encourage nor discourage you to use it. Use at your own risk.
Agree with some guys above and Lipert's opinion. In my case, it's quite often to do like this:
ICollection<int> A;
var B = new List<int> {1,2,3,4,5};
B.ForEach(A.Add);
To have an extension method for such operation a bit redundant in my view.
Select your proper configuration for launching Application.
In my case i found mistake as below image:
I had just changed like:
May it will help to someone, Thanks :)
WOOCOMMERCE ORDERS IN VERSION 3.0+
Since Woocommerce mega major Update 3.0+ things have changed quite a lot:
WC_Order
Object, properties can't be accessed directly anymore as before and will throw some errors.WC_Order
and WC_Abstract_Order
getter and setter methods are now required on the WC_Order
object instance.WC_Data
Abstract class allow to access Order and order items data using get_data()
, get_meta_data()
and get_meta()
methods.Related:
• How to get Customer details from Order in WooCommerce?
• Get Order items and WC_Order_Item_Product in WooCommerce 3
So the Order items properties will not be accessible as before in a foreach
loop and you will have to use these specific getter and setter methods instead.
Using some WC_Order
and WC_Abstract_Order
methods (example):
// Get an instance of the WC_Order object (same as before)
$order = wc_get_order( $order_id );
$order_id = $order->get_id(); // Get the order ID
$parent_id = $order->get_parent_id(); // Get the parent order ID (for subscriptions…)
$user_id = $order->get_user_id(); // Get the costumer ID
$user = $order->get_user(); // Get the WP_User object
$order_status = $order->get_status(); // Get the order status (see the conditional method has_status() below)
$currency = $order->get_currency(); // Get the currency used
$payment_method = $order->get_payment_method(); // Get the payment method ID
$payment_title = $order->get_payment_method_title(); // Get the payment method title
$date_created = $order->get_date_created(); // Get date created (WC_DateTime object)
$date_modified = $order->get_date_modified(); // Get date modified (WC_DateTime object)
$billing_country = $order->get_billing_country(); // Customer billing country
// ... and so on ...
For order status as a conditional method (where "the_targeted_status" need to be defined and replaced by an order status to target a specific order status):
if ( $order->has_status('completed') ) { // Do something }
Get and access to the order data properties (in an array of values):
// Get an instance of the WC_Order object
$order = wc_get_order( $order_id );
$order_data = $order->get_data(); // The Order data
$order_id = $order_data['id'];
$order_parent_id = $order_data['parent_id'];
$order_status = $order_data['status'];
$order_currency = $order_data['currency'];
$order_version = $order_data['version'];
$order_payment_method = $order_data['payment_method'];
$order_payment_method_title = $order_data['payment_method_title'];
$order_payment_method = $order_data['payment_method'];
$order_payment_method = $order_data['payment_method'];
## Creation and modified WC_DateTime Object date string ##
// Using a formated date ( with php date() function as method)
$order_date_created = $order_data['date_created']->date('Y-m-d H:i:s');
$order_date_modified = $order_data['date_modified']->date('Y-m-d H:i:s');
// Using a timestamp ( with php getTimestamp() function as method)
$order_timestamp_created = $order_data['date_created']->getTimestamp();
$order_timestamp_modified = $order_data['date_modified']->getTimestamp();
$order_discount_total = $order_data['discount_total'];
$order_discount_tax = $order_data['discount_tax'];
$order_shipping_total = $order_data['shipping_total'];
$order_shipping_tax = $order_data['shipping_tax'];
$order_total = $order_data['total'];
$order_total_tax = $order_data['total_tax'];
$order_customer_id = $order_data['customer_id']; // ... and so on
## BILLING INFORMATION:
$order_billing_first_name = $order_data['billing']['first_name'];
$order_billing_last_name = $order_data['billing']['last_name'];
$order_billing_company = $order_data['billing']['company'];
$order_billing_address_1 = $order_data['billing']['address_1'];
$order_billing_address_2 = $order_data['billing']['address_2'];
$order_billing_city = $order_data['billing']['city'];
$order_billing_state = $order_data['billing']['state'];
$order_billing_postcode = $order_data['billing']['postcode'];
$order_billing_country = $order_data['billing']['country'];
$order_billing_email = $order_data['billing']['email'];
$order_billing_phone = $order_data['billing']['phone'];
## SHIPPING INFORMATION:
$order_shipping_first_name = $order_data['shipping']['first_name'];
$order_shipping_last_name = $order_data['shipping']['last_name'];
$order_shipping_company = $order_data['shipping']['company'];
$order_shipping_address_1 = $order_data['shipping']['address_1'];
$order_shipping_address_2 = $order_data['shipping']['address_2'];
$order_shipping_city = $order_data['shipping']['city'];
$order_shipping_state = $order_data['shipping']['state'];
$order_shipping_postcode = $order_data['shipping']['postcode'];
$order_shipping_country = $order_data['shipping']['country'];
Get the order items and access the data with WC_Order_Item_Product
and WC_Order_Item
methods:
// Get an instance of the WC_Order object
$order = wc_get_order($order_id);
// Iterating through each WC_Order_Item_Product objects
foreach ($order->get_items() as $item_key => $item ):
## Using WC_Order_Item methods ##
// Item ID is directly accessible from the $item_key in the foreach loop or
$item_id = $item->get_id();
## Using WC_Order_Item_Product methods ##
$product = $item->get_product(); // Get the WC_Product object
$product_id = $item->get_product_id(); // the Product id
$variation_id = $item->get_variation_id(); // the Variation id
$item_type = $item->get_type(); // Type of the order item ("line_item")
$item_name = $item->get_name(); // Name of the product
$quantity = $item->get_quantity();
$tax_class = $item->get_tax_class();
$line_subtotal = $item->get_subtotal(); // Line subtotal (non discounted)
$line_subtotal_tax = $item->get_subtotal_tax(); // Line subtotal tax (non discounted)
$line_total = $item->get_total(); // Line total (discounted)
$line_total_tax = $item->get_total_tax(); // Line total tax (discounted)
## Access Order Items data properties (in an array of values) ##
$item_data = $item->get_data();
$product_name = $item_data['name'];
$product_id = $item_data['product_id'];
$variation_id = $item_data['variation_id'];
$quantity = $item_data['quantity'];
$tax_class = $item_data['tax_class'];
$line_subtotal = $item_data['subtotal'];
$line_subtotal_tax = $item_data['subtotal_tax'];
$line_total = $item_data['total'];
$line_total_tax = $item_data['total_tax'];
// Get data from The WC_product object using methods (examples)
$product = $item->get_product(); // Get the WC_Product object
$product_type = $product->get_type();
$product_sku = $product->get_sku();
$product_price = $product->get_price();
$stock_quantity = $product->get_stock_quantity();
endforeach;
So using
get_data()
method allow us to access to the protected data (associative array mode) …
As per the documentation: This allows you to switch from the default ASCII to other encodings such as UTF-8, which the Python runtime will use whenever it has to decode a string buffer to unicode.
This function is only available at Python start-up time, when Python scans the environment. It has to be called in a system-wide module, sitecustomize.py
, After this module has been evaluated, the setdefaultencoding()
function is removed from the sys
module.
The only way to actually use it is with a reload hack that brings the attribute back.
Also, the use of sys.setdefaultencoding()
has always been discouraged, and it has become a no-op in py3k. The encoding of py3k is hard-wired to "utf-8" and changing it raises an error.
I suggest some pointers for reading:
If you are in a loop, let's say that you loop through a list of punctuation characters that you want to remove, you can do something like this:
private const string PunctuationChars = ".,!?$";
foreach (var word in words)
{
var word_modified = word;
var modified = false;
foreach (var punctuationChar in PunctuationChars)
{
if (word.IndexOf(punctuationChar) > 0)
{
modified = true;
word_modified = word_modified.Replace("" + punctuationChar, "");
}
}
//////////MORE CODE
}
The trick being the following:
word_modified.Replace("" + punctuationChar, "");
You need to have cl.exe
(the Microsoft C Compiler) installed on your computer and in your PATH
. PATH
is an environment variable that tells Windows where to find executable files.
First, ensure the C++ build tools for Visual Studio are installed. You can download Build Tools for Visual Studio separately from the Visual Studio downloads page, then choose C++ build tools from the installer. If you already have Visual Studio, you can also install Desktop development with C++ from the Visual Studio Installer which you should have in Start Menu.
Then, instead of the normal Command Prompt or PowerShell, use one of the special command prompts in the Visual Studio folder in Start Menu. For 32-bit Python, you're probably looking for x86 Native Tools Command Prompt. This sets up PATH
automatically, so that cl.exe
can be found.
build.gradle
dependencies {
compile 'com.google.android.gms:play-services-vision:9.4.0+'
}
Set View
CameraSourcePreview mPreview = (CameraSourcePreview) findViewById(R.id.preview);
GraphicOverlay mGraphicOverlay = (GraphicOverlay) findViewById(R.id.faceOverlay);
CameraSource mCameraSource = new CameraSource.Builder(context, detector)
.setRequestedPreviewSize(640, 480)
.setFacing(CameraSource.CAMERA_FACING_FRONT)
.setRequestedFps(30.0f)
.build();
mPreview.start(mCameraSource, mGraphicOverlay);
Not only double quotes, you will be in need for single quote ('
), double quote ("
), backslash (\
) and NUL (the NULL byte).
Use fputcsv()
to write, and fgetcsv()
to read, which will take care of all.
I found a solution:
print("My message here");
@ is used as a prefix denoting stored procedure and function parameter names, and also variable names
select sum(A),sum(B),sum(C) from mytable where id in (1,2,3);
<?php
echo "<pre>";
print_r(get_loaded_extensions());
echo "<pre/>";
?>
What browser are you testing in?
What DOCType have you set?
How exactly are you declaring your CSS?
Are you sure you haven't missed a ;
before/after the overflow-y: scroll
?
I've just tested the following in IE7 and Firefox and it works fine
<!-- Scroll bar present but disabled when less content -->_x000D_
<div style="width: 200px; height: 100px; overflow-y: scroll;">_x000D_
test_x000D_
</div>_x000D_
_x000D_
<!-- Scroll bar present and enabled when more contents --> _x000D_
<div style="width: 200px; height: 100px; overflow-y: scroll;">_x000D_
test<br />_x000D_
test<br />_x000D_
test<br />_x000D_
test<br />_x000D_
test<br />_x000D_
test<br />_x000D_
test<br />_x000D_
test<br />_x000D_
test<br />_x000D_
test<br />_x000D_
</div>
_x000D_
A good way to do it is this:
span + span {
margin-left: 10px;
}
Every span
preceded by a span
(so, every span
except the first) will have margin-left: 10px
.
Here's a more detailed answer to a similar question: Separators between elements without hacks
The connector section has the parameter
maxPostSize
The maximum size in bytes of the POST which will be handled by the container FORM URL parameter parsing. The limit can be disabled by setting this attribute to a value less than or equal to 0. If not specified, this attribute is set to 2097152 (2 megabytes).
Another Limit is:
maxHttpHeaderSize The maximum size of the request and response HTTP header, specified in bytes. If not specified, this attribute is set to 4096 (4 KB).
You find them in
$TOMCAT_HOME/conf/server.xml
This is what worked for me...
import cv2
import numpy as np
#Created an image (really an ndarray) with three channels
new_image = np.ndarray((3, num_rows, num_cols), dtype=int)
#Did manipulations for my project where my array values went way over 255
#Eventually returned numbers to between 0 and 255
#Converted the datatype to np.uint8
new_image = new_image.astype(np.uint8)
#Separated the channels in my new image
new_image_red, new_image_green, new_image_blue = new_image
#Stacked the channels
new_rgb = np.dstack([new_image_red, new_image_green, new_image_blue])
#Displayed the image
cv2.imshow("WindowNameHere", new_rgbrgb)
cv2.waitKey(0)
print(*names)
this will work in python 3 if you want them to be printed out as space separated. If you need comma or anything else in between go ahead with .join() solution
If you're trying to perform an SSH-related operation and get the following error:
$ git fetch
no such identity: <ssh key path>: No such file or directory
You can remove the missing SSH key from your SSH agent with the following:
$ eval `ssh-agent -s` # start ssh agent
$ ssh-add -D <ssh key path> # delete ssh key
The "Issue 2" answer given by @Sagar works for the majority of git servers such as gitorious.
However, there will be a name clash in a system like gitolite where the public ssh keys are checked in as files named with the username, ie keydir/jenkins.pub
. What if there are multiple jenkins servers that need to access the same gitolite server?
(Note: this is about running the Jenkins daemon not running a build job as a user (addressed by @Sagar's "Issue 1").)
So in this case you do need to run the Jenkins daemon as a different user.
There are two steps:
The main thing is to update the JENKINS_USER
environment variable. Here's a patch showing how to change the user to ptran
.
--- etc/default/jenkins.old 2011-10-28 17:46:54.410305099 -0700
+++ etc/default/jenkins 2011-10-28 17:47:01.670369300 -0700
@@ -13,7 +13,7 @@
PIDFILE=/var/run/jenkins/jenkins.pid
# user id to be invoked as (otherwise will run as root; not wise!)
-JENKINS_USER=jenkins
+JENKINS_USER=ptran
# location of the jenkins war file
JENKINS_WAR=/usr/share/jenkins/jenkins.war
--- etc/init.d/jenkins.old 2011-10-28 17:47:20.878539172 -0700
+++ etc/init.d/jenkins 2011-10-28 17:47:47.510774714 -0700
@@ -23,7 +23,7 @@
#DAEMON=$JENKINS_SH
DAEMON=/usr/bin/daemon
-DAEMON_ARGS="--name=$NAME --inherit --env=JENKINS_HOME=$JENKINS_HOME --output=$JENKINS_LOG - -pidfile=$PIDFILE"
+DAEMON_ARGS="--name=$JENKINS_USER --inherit --env=JENKINS_HOME=$JENKINS_HOME --output=$JENKINS_LOG --pidfile=$PIDFILE"
SU=/bin/su
END PATCH
Update ownership of jenkins directories:
chown -R ptran /var/log/jenkins
chown -R ptran /var/lib/jenkins
chown -R ptran /var/run/jenkins
chown -R ptran /var/cache/jenkins
Restart jenkins
sudo service jenkins restart
I think you can use db.collection.distinct(fields,query)
You will be able to get the distinct values in your case for NetworkID.
It should be something like this :
Db.collection.distinct('NetworkID')
There is a fairly complete recording demo available at: http://webaudiodemos.appspot.com/AudioRecorder/index.html
It allows you to record audio in the browser, then gives you the option to export and download what you've recorded.
You can view the source of that page to find links to the javascript, but to summarize, there's a Recorder
object that contains an exportWAV
method, and a forceDownload
method.
Uri is serializable, so you can save strings and convert it back when loading
when saving
String str = myUri.toString();
and when loading
Uri myUri = Uri.parse(str);
You can avoid blocking execution by writing the plot to an array, then displaying the array in a different thread. Here is an example of generating and displaying plots simultaneously using pf.screen from pyformulas 0.2.8:
import pyformulas as pf
import matplotlib.pyplot as plt
import numpy as np
import time
fig = plt.figure()
canvas = np.zeros((480,640))
screen = pf.screen(canvas, 'Sinusoid')
start = time.time()
while True:
now = time.time() - start
x = np.linspace(now-2, now, 100)
y = np.sin(2*np.pi*x) + np.sin(3*np.pi*x)
plt.xlim(now-2,now+1)
plt.ylim(-3,3)
plt.plot(x, y, c='black')
# If we haven't already shown or saved the plot, then we need to draw the figure first...
fig.canvas.draw()
image = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='')
image = image.reshape(fig.canvas.get_width_height()[::-1] + (3,))
screen.update(image)
#screen.close()
Result:
Disclaimer: I'm the maintainer for pyformulas.
Reference: Matplotlib: save plot to numpy array
The macros defined in <inttypes.h>
are the most correct way to print values of types uint32_t
, uint16_t
, and so forth -- but they're not the only way.
Personally, I find those macros difficult to remember and awkward to use. (Given the syntax of a printf
format string, that's probably unavoidable; I'm not claiming I could have come up with a better system.)
An alternative is to cast the values to a predefined type and use the format for that type.
Types int
and unsigned int
are guaranteed by the language to be at least 16 bits wide, and therefore to be able to hold any converted value of type int16_t
or uint16_t
, respectively. Similarly, long
and unsigned long
are at least 32 bits wide, and long long
and unsigned long long
are at least 64 bits wide.
For example, I might write your program like this (with a few additional tweaks):
#include <stdio.h>
#include <stdint.h>
#include <netinet/in.h>
int main(void)
{
uint32_t a=12, a1;
uint16_t b=1, b1;
a1 = htonl(a);
printf("%lu---------%lu\n", (unsigned long)a, (unsigned long)a1);
b1 = htons(b);
printf("%u-----%u\n", (unsigned)b, (unsigned)b1);
return 0;
}
One advantage of this approach is that it can work even with pre-C99 implementations that don't support <inttypes.h>
. Such an implementation most likely wouldn't have <stdint.h>
either, but the technique is useful for other integer types.
Postgresql does not have an equivalent of Oracle's ROWNUM. In many cases you can achieve the same result by using LIMIT and OFFSET in your query.
We can use like below as well
SELECT *
FROM dbo.March2010 A
WHERE CAST(A.Date AS Date) >= '2017-03-22';
SELECT *
FROM dbo.March2010 A
WHERE CAST(A.Date AS Datetime) >= '2017-03-22 06:49:53.840';
ECMAScript 2018 introduces named capturing groups into JavaScript regexes.
Example:
const auth = 'Bearer AUTHORIZATION_TOKEN'
const { groups: { token } } = /Bearer (?<token>[^ $]*)/.exec(auth)
console.log(token) // "Prints AUTHORIZATION_TOKEN"
If you need to support older browsers, you can do everything with normal (numbered) capturing groups that you can do with named capturing groups, you just need to keep track of the numbers - which may be cumbersome if the order of capturing group in your regex changes.
There are only two "structural" advantages of named capturing groups I can think of:
In some regex flavors (.NET and JGSoft, as far as I know), you can use the same name for different groups in your regex (see here for an example where this matters). But most regex flavors do not support this functionality anyway.
If you need to refer to numbered capturing groups in a situation where they are surrounded by digits, you can get a problem. Let's say you want to add a zero to a digit and therefore want to replace (\d)
with $10
. In JavaScript, this will work (as long as you have fewer than 10 capturing group in your regex), but Perl will think you're looking for backreference number 10
instead of number 1
, followed by a 0
. In Perl, you can use ${1}0
in this case.
Other than that, named capturing groups are just "syntactic sugar". It helps to use capturing groups only when you really need them and to use non-capturing groups (?:...)
in all other circumstances.
The bigger problem (in my opinion) with JavaScript is that it does not support verbose regexes which would make the creation of readable, complex regular expressions a lot easier.
Steve Levithan's XRegExp library solves these problems.
No point repeating the other answers, but please note that strdup()
can do anything it wants from a C perspective, since it is not part of any C standard. It is however defined by POSIX.1-2001.
The icon will adopt the color from value of the color
css property of it's parent.
You can either add this directly to the style:
<span class="glyphicon glyphicon-user" style="color:blue"></span>
Or you can add it as a class to your icon and then set the font color to it in CSS
HTML
<span class="glyphicon glyphicon-search"></span>
<span class="glyphicon glyphicon-user blue"></span>
<span class="glyphicon glyphicon-trash"></span>
CSS
.blue {
color: blue;
}
This fiddle has an example.
select u from UserGroup ug inner join ug.user u
where ug.group_id = :groupId
order by u.lastname
As a named query:
@NamedQuery(
name = "User.findByGroupId",
query =
"SELECT u FROM UserGroup ug " +
"INNER JOIN ug.user u WHERE ug.group_id = :groupId ORDER BY u.lastname"
)
Use paths in the HQL statement, from one entity to the other. See the Hibernate documentation on HQL and joins for details.
In EDIT 2:
while((line = bufferedReader.readLine()) != null)
{
sb.append(line); //append the lines to the string
sb.append('\n'); //append new line
} //end while
you are reading the text file, and appending a newline to it. Don't append newline, which will not show a newline in some simple-minded Windows editors like Notepad. Instead append the OS-specific line separator string using:
sb.append(System.lineSeparator());
(for Java 1.7 and 1.8)
or
sb.append(System.getProperty("line.separator"));
(Java 1.6 and below)
Alternatively, later you can use String.replaceAll()
to replace "\n"
in the string built in the StringBuffer with the OS-specific newline character:
String updatedText = text.replaceAll("\n", System.lineSeparator())
but it would be more efficient to append it while you are building the string, than append '\n'
and replace it later.
Finally, as a developer, if you are using notepad for viewing or editing files, you should drop it, as there are far more capable tools like Notepad++, or your favorite Java IDE.
You can use one of the following options:
<link href="{{ asset('css/app.css') }}" rel="stylesheet" type="text/css" >
<link href="{{ URL::asset('css/app.css') }}" rel="stylesheet" type="text/css" >
{!! Html::style( asset('css/app.css')) !!}
You can also simply set the Source attribute rather than using the child elements. To do this your class needs to return the image as a Bitmap Image. Here is an example of one way I've done it
<Image Width="90" Height="90"
Source="{Binding Path=ImageSource}"
Margin="0,0,0,5" />
And the class property is simply this
public object ImageSource {
get {
BitmapImage image = new BitmapImage();
try {
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad;
image.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
image.UriSource = new Uri( FullPath, UriKind.Absolute );
image.EndInit();
}
catch{
return DependencyProperty.UnsetValue;
}
return image;
}
}
I suppose it may be a little more work than the value converter, but it is another option.
Use *
var allElem = document.getElementsByTagName("*");
for (var i = 0; i < allElem.length; i++) {
// Do something with all element here
}
Use a slice, like below:
with open('yourfile.txt') as f:
lines_after_17 = f.readlines()[17:]
If the file is too big to load in memory:
with open('yourfile.txt') as f:
for _ in range(17):
next(f)
for line in f:
# do stuff
You can define you own object prototype, just before its usage or at the beginning of your code.
The definition should look like this:
Object.prototype.hasOwnProperties = function()_x000D_
{ _x000D_
for (var k in this)_x000D_
{ _x000D_
if ( this.hasOwnProperty(k) )_x000D_
{ _x000D_
return true;_x000D_
} _x000D_
}_x000D_
return false;_x000D_
}
_x000D_
Here is a usage example:
var a = {};_x000D_
_x000D_
while ( a.status !== "finished" )_x000D_
{ _x000D_
if ( status === "processing" )_x000D_
{_x000D_
a.status = "finished"; _x000D_
}_x000D_
_x000D_
if ( status === "starting" )_x000D_
{_x000D_
a.status = "processing"; _x000D_
}_x000D_
_x000D_
if ( !a.hasOwnProperties() )_x000D_
{_x000D_
a.status = "starting";_x000D_
}_x000D_
}
_x000D_
Enjoy! :-)
From the book Linux System Programming by Robert Love:
Concurrency, Parallelism, and Races
Threads create two related but distinct phenomena: concurrency and parallelism. Both are bittersweet, touching on the costs of threading as well as its benefits. Concurrency is the ability of two or more threads to execute in overlapping time periods. Parallelism is the ability to execute two or more threads simultaneously. Concurrency can occur without parallelism: for example, multitasking on a single processor system. Parallelism (sometimes emphasized as true parallelism) is a specific form of concurrency requiring multiple processors (or a single processor capable of multiple engines of execution, such as a GPU). With concurrency, multiple threads make forward progress, but not necessarily simultaneously. With parallelism, threads literally execute in parallel, allowing multithreaded programs to utilize multiple processors.
Concurrency is a programming pattern, a way of approaching problems. Parallelism is a hardware feature, achievable through concurrency. Both are useful.
This explanation is consistent with the accepted answer. Actually the concepts are far simpler than we think. Don't think them as magic. Concurrency is about a period of time, while Parallelism is about exactly at the same time, simultaneously.
try this one :
$('html').keyup(function(e){if(e.keyCode == 8)alert('backspace trapped')})
- (float)__getMemoryUsedPer1
{
struct mach_task_basic_info info;
mach_msg_type_number_t size = MACH_TASK_BASIC_INFO;
kern_return_t kerr = task_info(mach_task_self(), MACH_TASK_BASIC_INFO, (task_info_t)&info, &size);
if (kerr == KERN_SUCCESS)
{
float used_bytes = info.resident_size;
float total_bytes = [NSProcessInfo processInfo].physicalMemory;
//NSLog(@"Used: %f MB out of %f MB (%f%%)", used_bytes / 1024.0f / 1024.0f, total_bytes / 1024.0f / 1024.0f, used_bytes * 100.0f / total_bytes);
return used_bytes / total_bytes;
}
return 1;
}
If one will use TASK_BASIC_INFO_COUNT instead of MACH_TASK_BASIC_INFO, you will get
kerr == KERN_INVALID_ARGUMENT (4)
Here is the issue
$total_result = $result->num_rows;
try this
<?php
if ($result = $mysqli->query("SELECT * FROM players ORDER BY id"))
{
if ($result->num_rows > 0)
{
$total_result = $result->num_rows;
$total_pages = ceil($total_result / $per_page);
if(isset($_GET['page']) && is_numeric($_GET['page']))
{
$show_page = $_GET['page'];
if ($show_page > 0 && $show_page <= $total_pages)
{
$start = ($show_page - 1) * $per_page;
$end = $start + $per_page;
}
else
{
$start = 0;
$end = $per_page;
}
}
else
{
$start = 0;
$end = $per_page;
}
//display paginations
echo "<p> View pages: ";
for ($i=1; $i < $total_pages; $i++)
{
if (isset($_GET['page']) && $_GET['page'] == $i)
{
echo $i . " ";
}
else
{
echo "<a href='view-pag.php?$i'>" . $i . "</a> | ";
}
}
echo "</p>";
}
else
{
echo "No result to display.";
}
}
else
{
echo "Error: " . $mysqli->error;
}
?>
Since this answer was somehow accepted and thus will appear at the top, although it's not the best, I've improved it based on the other answers and the comments.
The C way; simplest, but will treat any invalid number as 0:
#include <cstdlib>
int x = atoi(argv[1]);
The C way with input checking:
#include <cstdlib>
errno = 0;
char *endptr;
long int x = strtol(argv[1], &endptr, 10);
if (endptr == argv[1]) {
std::cerr << "Invalid number: " << argv[1] << '\n';
} else if (*endptr) {
std::cerr << "Trailing characters after number: " << argv[1] << '\n';
} else if (errno == ERANGE) {
std::cerr << "Number out of range: " << argv[1] << '\n';
}
The C++ iostreams way with input checking:
#include <sstream>
std::istringstream ss(argv[1]);
int x;
if (!(ss >> x)) {
std::cerr << "Invalid number: " << argv[1] << '\n';
} else if (!ss.eof()) {
std::cerr << "Trailing characters after number: " << argv[1] << '\n';
}
Alternative C++ way since C++11:
#include <stdexcept>
#include <string>
std::string arg = argv[1];
try {
std::size_t pos;
int x = std::stoi(arg, &pos);
if (pos < arg.size()) {
std::cerr << "Trailing characters after number: " << arg << '\n';
}
} catch (std::invalid_argument const &ex) {
std::cerr << "Invalid number: " << arg << '\n';
} catch (std::out_of_range const &ex) {
std::cerr << "Number out of range: " << arg << '\n';
}
All four variants assume that argc >= 2
. All accept leading whitespace; check isspace(argv[1][0])
if you don't want that. All except atoi
reject trailing whitespace.
Once you know this:
Date
by calling the constructor with milliseconds since Jan 1, 1970.valueOf()
a Date
is the number of milliseconds since Jan 1, 197060,000
milliseconds in a minute :-]...it isn't so hard.
In the code below, a new Date
is created by subtracting the appropriate number of milliseconds from myEndDateTime
:
var MS_PER_MINUTE = 60000;
var myStartDate = new Date(myEndDateTime - durationInMinutes * MS_PER_MINUTE);
Here's another looping example. This one also contains an 'if-statement' as an example of checking to see if the entry is a 'file' (or a 'directory' for example):
for f in $(cat 1.txt); do if [ -f $f ]; then rm $f; fi; done
I had difficulty with the answers above, potentially because I set the checkStyle warnings to be errors. What did work was SuppressionFilter: http://checkstyle.sourceforge.net/config_filters.html#SuppressionFilter
The drawback of this is that the line range is stored in a separate suppresssions.xml file, so an unfamiliar developer may not immediately make the connection.
. matches any character so needs escaping i.e. \.
, or \\.
within a Java string (because \
itself has special meaning within Java strings.)
You can then use \.\.
or \.{2}
to match exactly 2 dots.
If you need direct access:
WScript.Arguments.Item(0)
WScript.Arguments.Item(1)
...
I wanted to show how powerful it can be aside from just checking "-lt".
Example: I used it to calculate time differences take from Windows event view Application log:
Get the difference between the two date times:
PS> $Obj = ((get-date "10/22/2020 12:51:1") - (get-date "10/22/2020 12:20:1 "))
Object created:
PS> $Obj
Days : 0
Hours : 0
Minutes : 31
Seconds : 0
Milliseconds : 0
Ticks : 18600000000
TotalDays : 0.0215277777777778
TotalHours : 0.516666666666667
TotalMinutes : 31
TotalSeconds : 1860
TotalMilliseconds : 1860000
Access an item directly:
PS> $Obj.Minutes
31
Use @SessionAttributes
See the docs: Using @SessionAttributes to store model attributes in the HTTP session between requests
"Understanding Spring MVC Model And Session Attributes" also gives a very good overview of Spring MVC sessions and explains how/when @ModelAttribute
s are transferred into the session (if the controller is @SessionAttributes
annotated).
That article also explains that it is better to use @SessionAttributes
on the model instead of setting attributes directly on the HttpSession because that helps Spring MVC to be view-agnostic.
First, I want to explain an assumption that I make for this answer. It is not always true, but quite often:
Interfaces are adjectives; classes are nouns.
(Actually, there are interfaces that are nouns as well, but I want to generalize here.)
So, e.g. an interface may be something such as IDisposable
, IEnumerable
or IPrintable
. A class is an actual implementation of one or more of these interfaces: List
or Map
may both be implementations of IEnumerable
.
To get the point: Often your classes depend on each other. E.g. you could have a Database
class which accesses your database (hah, surprise! ;-)), but you also want this class to do logging about accessing the database. Suppose you have another class Logger
, then Database
has a dependency to Logger
.
So far, so good.
You can model this dependency inside your Database
class with the following line:
var logger = new Logger();
and everything is fine. It is fine up to the day when you realize that you need a bunch of loggers: Sometimes you want to log to the console, sometimes to the file system, sometimes using TCP/IP and a remote logging server, and so on ...
And of course you do NOT want to change all your code (meanwhile you have gazillions of it) and replace all lines
var logger = new Logger();
by:
var logger = new TcpLogger();
First, this is no fun. Second, this is error-prone. Third, this is stupid, repetitive work for a trained monkey. So what do you do?
Obviously it's a quite good idea to introduce an interface ICanLog
(or similar) that is implemented by all the various loggers. So step 1 in your code is that you do:
ICanLog logger = new Logger();
Now the type inference doesn't change type any more, you always have one single interface to develop against. The next step is that you do not want to have new Logger()
over and over again. So you put the reliability to create new instances to a single, central factory class, and you get code such as:
ICanLog logger = LoggerFactory.Create();
The factory itself decides what kind of logger to create. Your code doesn't care any longer, and if you want to change the type of logger being used, you change it once: Inside the factory.
Now, of course, you can generalize this factory, and make it work for any type:
ICanLog logger = TypeFactory.Create<ICanLog>();
Somewhere this TypeFactory needs configuration data which actual class to instantiate when a specific interface type is requested, so you need a mapping. Of course you can do this mapping inside your code, but then a type change means recompiling. But you could also put this mapping inside an XML file, e.g.. This allows you to change the actually used class even after compile time (!), that means dynamically, without recompiling!
To give you a useful example for this: Think of a software that does not log normally, but when your customer calls and asks for help because he has a problem, all you send to him is an updated XML config file, and now he has logging enabled, and your support can use the log files to help your customer.
And now, when you replace names a little bit, you end up with a simple implementation of a Service Locator, which is one of two patterns for Inversion of Control (since you invert control over who decides what exact class to instantiate).
All in all this reduces dependencies in your code, but now all your code has a dependency to the central, single service locator.
Dependency injection is now the next step in this line: Just get rid of this single dependency to the service locator: Instead of various classes asking the service locator for an implementation for a specific interface, you - once again - revert control over who instantiates what.
With dependency injection, your Database
class now has a constructor that requires a parameter of type ICanLog
:
public Database(ICanLog logger) { ... }
Now your database always has a logger to use, but it does not know any more where this logger comes from.
And this is where a DI framework comes into play: You configure your mappings once again, and then ask your DI framework to instantiate your application for you. As the Application
class requires an ICanPersistData
implementation, an instance of Database
is injected - but for that it must first create an instance of the kind of logger which is configured for ICanLog
. And so on ...
So, to cut a long story short: Dependency injection is one of two ways of how to remove dependencies in your code. It is very useful for configuration changes after compile-time, and it is a great thing for unit testing (as it makes it very easy to inject stubs and / or mocks).
In practice, there are things you can not do without a service locator (e.g., if you do not know in advance how many instances you do need of a specific interface: A DI framework always injects only one instance per parameter, but you can call a service locator inside a loop, of course), hence most often each DI framework also provides a service locator.
But basically, that's it.
P.S.: What I described here is a technique called constructor injection, there is also property injection where not constructor parameters, but properties are being used for defining and resolving dependencies. Think of property injection as an optional dependency, and of constructor injection as mandatory dependencies. But discussion on this is beyond the scope of this question.
This can't be done by using a Comparator
, as it will always get the key of the map to compare. TreeMap
can only sort by the key.
There are a couple of things to be aware of:
src/main/resources/public
will be served from the root of your application.
For example src/main/resources/public/hello.jpg
would be served from http://localhost:8080/hello.jpg
This is why your current matcher configuration hasn't permitted access to the static resources. For /resources/**
to work, you would have to place the resources in src/main/resources/public/resources
and access them at http://localhost:8080/resources/your-resource
.
As you're using Spring Boot, you may want to consider using its defaults rather than adding extra configuration. Spring Boot will, by default, permit access to /css/**
, /js/**
, /images/**
, and /**/favicon.ico
. You could, for example, have a file named src/main/resources/public/images/hello.jpg
and, without adding any extra configuration, it would be accessible at http://localhost:8080/images/hello.jpg
without having to log in. You can see this in action in the web method security smoke test where access is permitted to the Bootstrap CSS file without any special configuration.
It may also happen if the browser zoom level is not correct. Your browser window zoom should be 100%. In Chrome use Ctrl + 0
to reset the zoom level.
I used a combination of Attila Fulop (Lea Verou) solution for modern browsers and Gavin Brock solution for old browsers as follows:
if (history.pushState) {
// IE10, Firefox, Chrome, etc.
window.history.pushState(null, null, '#' + id);
} else {
// IE9, IE8, etc
window.location.hash = '#!' + id;
}
As observed by Gavin Brock, to capture the id back you will have to treat the string (which in this case can have or not the "!") as follows:
id = window.location.hash.replace(/^#!?/, '');
Before that, I tried a solution similar to the one proposed by user706270, but it did not work well with Internet Explorer: as its Javascript engine is not very fast, you can notice the scroll increase and decrease, which produces a nasty visual effect.
try this method
$("your id or class name").css({ 'margin-top': '18px' });
I like the fundamental differences in the way that Ruby and Python method invocations operate.
Ruby methods are invoked via a form "message passing" and need not be explicitly first-class functions (there are ways to lift methods into "proper" function-objects) -- in this aspect Ruby is similar to Smalltalk.
Python works much more like JavaScript (or even Perl) where methods are functions which are invoked directly (there is also stored context information, but...)
While this might seem like a "minor" detail it is really just the surface of how different the Ruby and Python designs are. (On the other hand, they are also quite the same :-)
One practical difference is the concept of method_missing
in Ruby (which, for better or worse, seems to be used in some popular frameworks). In Python, one can (at least partially) emulate the behavior using __getattr__/__getattribute__, albeit non-idiomatically.
As mentioned above @NotNull
does nothing on its own. A good way of using @NotNull
would be using it with Objects.requireNonNull
public class Foo {
private final Bar bar;
public Foo(@NotNull Bar bar) {
this.bar = Objects.requireNonNull(bar, "bar must not be null");
}
}
Why don't you just save/serve the CSS file as UTF-8?
nav a:hover:after {
content: "?";
}
If that's not good enough, and you want to keep it all-ASCII:
nav a:hover:after {
content: "\2193";
}
The general format for a Unicode character inside a string is \000000
to \FFFFFF
– a backslash followed by six hexadecimal digits. You can leave out leading 0
digits when the Unicode character is the last character in the string or when you add a space after the Unicode character. See the spec below for full details.
Relevant part of the CSS2 spec:
Third, backslash escapes allow authors to refer to characters they cannot easily put in a document. In this case, the backslash is followed by at most six hexadecimal digits (0..9A..F), which stand for the ISO 10646 ([ISO10646]) character with that number, which must not be zero. (It is undefined in CSS 2.1 what happens if a style sheet does contain a character with Unicode codepoint zero.) If a character in the range [0-9a-fA-F] follows the hexadecimal number, the end of the number needs to be made clear. There are two ways to do that:
- with a space (or other white space character): "\26 B" ("&B"). In this case, user agents should treat a "CR/LF" pair (U+000D/U+000A) as a single white space character.
- by providing exactly 6 hexadecimal digits: "\000026B" ("&B")
In fact, these two methods may be combined. Only one white space character is ignored after a hexadecimal escape. Note that this means that a "real" space after the escape sequence must be doubled.
If the number is outside the range allowed by Unicode (e.g., "\110000" is above the maximum 10FFFF allowed in current Unicode), the UA may replace the escape with the "replacement character" (U+FFFD). If the character is to be displayed, the UA should show a visible symbol, such as a "missing character" glyph (cf. 15.2, point 5).
- Note: Backslash escapes are always considered to be part of an identifier or a string (i.e., "\7B" is not punctuation, even though "{" is, and "\32" is allowed at the start of a class name, even though "2" is not).
The identifier "te\st" is exactly the same identifier as "test".
Comprehensive list: Unicode Character 'DOWNWARDS ARROW' (U+2193).
For some reasons, all of the answers in this thread, in onActivityResult()
try to post-process the received Uri
, like getting the real path of the image and then use BitmapFactory.decodeFile(path)
to get the Bitmap
.
This step is unnecessary. The ImageView
class has a method called setImageURI(uri)
. Pass your uri to it and you should be done.
Uri imageUri = data.getData();
imageView.setImageURI(imageUri);
For a complete working example you could take a look here: http://androidbitmaps.blogspot.com/2015/04/loading-images-in-android-part-iii-pick.html
PS:
Getting the Bitmap
in a separate variable would make sense in cases where the image to be loaded is too large to fit in memory, and a scale down operation is necessary to prevent OurOfMemoryError
, like shown in the @siamii answer.
It works like this. View.OnClickListenere is defined -
public interface OnClickListener {
void onClick(View v);
}
As far as we know you cannot instantiate an object OnClickListener
, as it doesn't have a method implemented. So there are two ways you can go by - you can implement this interface which will override onClick
method like this:
public class MyListener implements View.OnClickListener {
@Override
public void onClick (View v) {
// your code here;
}
}
But it's tedious to do it each time as you want to set a click listener. So in order to avoid this you can provide the implementation for the method on spot, just like in an example you gave.
setOnClickListener
takes View.OnClickListener
as its parameter.
To elaborate on @Bakuriu's answer above, I've found that this enables me to catch a runtime warning in a similar fashion to how I would catch an error warning, printing out the warning nicely:
import warnings
with warnings.catch_warnings():
warnings.filterwarnings('error')
try:
answer = 1 / 0
except Warning as e:
print('error found:', e)
You will probably be able to play around with placing of the warnings.catch_warnings() placement depending on how big of an umbrella you want to cast with catching errors this way.
From Microsoft documentation:
PAGEIOLATCH_SH
Occurs when a task is waiting on a latch for a buffer that is in an
I/O
request. The latch request is in Shared mode. Long waits may indicate problems with the disk subsystem.
In practice, this almost always happens due to large scans over big tables. It almost never happens in queries that use indexes efficiently.
If your query is like this:
Select * from <table> where <col1> = <value> order by <PrimaryKey>
, check that you have a composite index on (col1, col_primary_key)
.
If you don't have one, then you'll need either a full INDEX SCAN
if the PRIMARY KEY
is chosen, or a SORT
if an index on col1
is chosen.
Both of them are very disk I/O
consuming operations on large tables.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<solid android:color="@color/orange"/>
</shape>
</item>
<item
android:top="2dp"
android:bottom="2dp"
android:left="2dp"
android:right="2dp">
<shape android:shape="oval">
<solid android:color="@color/white"/>
</shape>
</item>
<item
android:drawable="@drawable/messages" //here messages is my image name, please give here your image name.
android:bottom="15dp"
android:left="15dp"
android:right="15dp"
android:top="15dp"/>
<ImageView
android:id="@+id/imageView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/merchant_circle" /> // here merchant_circle will be your first .xml file name
SWIFT 4
WORKS ON IPHONE AND IPAD BOTH. ALSO ALLOWS ROTATION
PORTRAIT
Code (tested)
let alert = UIAlertController()
let width: Int = Int(UIScreen.main.bounds.width - 100)
let viewAction = UIAlertAction(title: "View", style: .default , handler:{ (UIAlertAction)in
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let orderDetailVC = storyboard.instantiateViewController(withIdentifier: "orderDetail") as! OrderDetailTableViewController
orderDetailVC.orderId = self.myDraftOrders[indexPath.row]["id"].intValue
self.navigationController?.pushViewController(orderDetailVC, animated: true)
})
viewAction.setValue(appGreenColor, forKey: "titleTextColor")
alert.addAction(viewAction)
let modifyAction = UIAlertAction(title: "Modify", style: .default, handler:{ (UIAlertAction)in
showAlert("Coming soon...")
})
modifyAction.setValue(appCyanColor, forKey: "titleTextColor")
alert.addAction(modifyAction)
let copyAction = UIAlertAction(title: "Copy", style: .default, handler:{ (UIAlertAction)in
self.copyOrder(orderId: self.myDraftOrders[indexPath.row]["id"].intValue)
})
copyAction.setValue(appBlueColor, forKey: "titleTextColor")
alert.addAction(copyAction)
alert.addAction(UIAlertAction(title: "Delete", style: .destructive , handler:{ (UIAlertAction)in
self.deleteOrder(orderId: self.myDraftOrders[indexPath.row]["id"].intValue, indexPath: indexPath)
}))
alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler:{ (UIAlertAction)in
print("User click Dismiss button")
}))
let popover = alert.popoverPresentationController
popover?.delegate = self
let cellT = tableView.cellForRow(at: indexPath)
popover?.sourceView = cellT
popover?.sourceRect = CGRect(x: width, y: 25, width: 100, height: 50)
present(alert, animated: true)
Some more details in relation with the response from Cody Gray. As it took me some time to digest it I though it might be usefull to others.
First, some definitions:
Bar
is a TypeName in Public Class Bar
, or in Dim Foo as Bar
. TypeNames could be seen as "labels" used in the code to tell the compiler which type definition to look for in a dictionary where all available types would be described.System.Type
objects which contain a value. This value indicates a type; just like a String
would take some text or an Int
would take a number, except we are storing types instead of text or numbers. Type
objects contain the type definitions, as well as its corresponding TypeName.Second, the theory:
Foo.GetType()
returns a Type
object which contains the type for the variable Foo
. In other words, it tells you what Foo
is an instance of.GetType(Bar)
returns a Type
object which contains the type for the TypeName Bar
.In some instances, the type an object has been Cast
to is different from the type an object was first instantiated from. In the following example, MyObj is an Integer
cast into an Object
:
Dim MyVal As Integer = 42
Dim MyObj As Object = CType(MyVal, Object)
So, is MyObj
of type Object
or of type Integer
? MyObj.GetType()
will tell you it is an Integer
.
Type Of Foo Is Bar
feature, which allows you to ascertain a variable Foo
is compatible with a TypeName Bar
. Type Of MyObj Is Integer
and Type Of MyObj Is Object
will both return True. For most cases, TypeOf will indicate a variable is compatible with a TypeName if the variable is of that Type or a Type that derives from it.
More info here: https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/operators/typeof-operator#remarksThe test below illustrate quite well the behaviour and usage of each of the mentionned keywords and properties.
Public Sub TestMethod1()
Dim MyValInt As Integer = 42
Dim MyValDble As Double = CType(MyValInt, Double)
Dim MyObj As Object = CType(MyValDble, Object)
Debug.Print(MyValInt.GetType.ToString) 'Returns System.Int32
Debug.Print(MyValDble.GetType.ToString) 'Returns System.Double
Debug.Print(MyObj.GetType.ToString) 'Returns System.Double
Debug.Print(MyValInt.GetType.GetType.ToString) 'Returns System.RuntimeType
Debug.Print(MyValDble.GetType.GetType.ToString) 'Returns System.RuntimeType
Debug.Print(MyObj.GetType.GetType.ToString) 'Returns System.RuntimeType
Debug.Print(GetType(Integer).GetType.ToString) 'Returns System.RuntimeType
Debug.Print(GetType(Double).GetType.ToString) 'Returns System.RuntimeType
Debug.Print(GetType(Object).GetType.ToString) 'Returns System.RuntimeType
Debug.Print(MyValInt.GetType = GetType(Integer)) '# Returns True
Debug.Print(MyValInt.GetType = GetType(Double)) 'Returns False
Debug.Print(MyValInt.GetType = GetType(Object)) 'Returns False
Debug.Print(MyValDble.GetType = GetType(Integer)) 'Returns False
Debug.Print(MyValDble.GetType = GetType(Double)) '# Returns True
Debug.Print(MyValDble.GetType = GetType(Object)) 'Returns False
Debug.Print(MyObj.GetType = GetType(Integer)) 'Returns False
Debug.Print(MyObj.GetType = GetType(Double)) '# Returns True
Debug.Print(MyObj.GetType = GetType(Object)) 'Returns False
Debug.Print(TypeOf MyObj Is Integer) 'Returns False
Debug.Print(TypeOf MyObj Is Double) '# Returns True
Debug.Print(TypeOf MyObj Is Object) '# Returns True
End Sub
EDIT
You can also use Information.TypeName(Object)
to get the TypeName of a given object. For example,
Dim Foo as Bar
Dim Result as String
Result = TypeName(Foo)
Debug.Print(Result) 'Will display "Bar"
Please see the below code to enable or disable Submit button
If Name and City fields has value then only Submit button will be enabled.
<script>_x000D_
$(document).ready(function() {_x000D_
$(':input[type="submit"]').prop('disabled', true);_x000D_
_x000D_
$('#Name').keyup(function() {_x000D_
ToggleButton();_x000D_
});_x000D_
$('#City').keyup(function() {_x000D_
ToggleButton();_x000D_
});_x000D_
_x000D_
});_x000D_
_x000D_
function ToggleButton() {_x000D_
if (($('#Name').val() != '') && ($('#City').val() != '')) {_x000D_
$(':input[type="submit"]').prop('disabled', false);_x000D_
return true;_x000D_
} else {_x000D_
$(':input[type="submit"]').prop('disabled', true);_x000D_
return false;_x000D_
}_x000D_
} </script>
_x000D_
<form method="post">_x000D_
_x000D_
<div class="row">_x000D_
<div class="col-md-4">_x000D_
<h2>Getting started</h2>_x000D_
<fieldset>_x000D_
<label class="control-label text-danger">Name</label>_x000D_
<input type="text" id="Name" name="Name" class="form-control" />_x000D_
<label class="control-label">Address</label>_x000D_
<input type="text" id="Address" name="Address" class="form-control" />_x000D_
<label class="control-label text-danger">City</label>_x000D_
<input type="text" id="City" name="City" class="form-control" />_x000D_
<label class="control-label">Pin</label>_x000D_
<input type="text" id="Pin" name="Pin" class="form-control" />_x000D_
<input type="submit" value="send" class="btn btn-success" />_x000D_
</fieldset>_x000D_
</div>_x000D_
</div>_x000D_
</form>
_x000D_
What you are trying to do is impossible; your current shell is running under your regular user ID (i.e. without root the access sudo
would give you), and there is no way to grant it root access. What sudo
does is create a new *sub*process that runs as root. The subprocess could be just a regular program (e.g. sudo cp ...
runs the cp
program in a root process) or it could be a root subshell, but it cannot be the current shell.
(It's actually even more impossible than that, because the sudo
command itself is executed as a subprocess of the current shell -- meaning that in a sense it's already too late for it to do anything in the "current shell", because that's not where it executes.)
This will display the selected values:
<?php
if ($_POST) {
foreach($_POST['select2'] as $selected) {
echo $selected."<br>";
}
}
?>
Just comment out "Defaults env_reset" in /etc/sudoers
You can use jspdf to capture a canvas into an image or pdf like this:
var imgData = canvas.toDataURL('image/png');
var doc = new jsPDF('p', 'mm');
doc.addImage(imgData, 'PNG', 10, 10);
doc.save('sample-file.pdf');
More info: https://github.com/MrRio/jsPDF
This error message is easy to reproduce.
cmd
, Enter.
On Linux: Ctrl + Alt + t.)npm
and hit Enter to see if Node.js is installed.command not found
, download at https://nodejs.org/en/download/
and install.sudo apt install nodejs
if you prefer.)node thisFileDoesNotExist.js
(and hit Enter).On Windows expect to see something similar to:
internal/modules/cjs/loader.js:969
throw err;
^
Error: Cannot find module [... + a few more lines]
On Linux (Ubuntu 18.04):
module.js:549
throw err;
^
Error: Cannot find module [...]
I have not tried macOS, but would expect something similar there as well.
Note: This might happen for no apparent reason when debugging
in Visual Studio Code.
If you get the error inside VScode, see if the answer by
HappyHands31
is of any help.
Finally, to run Node.js in the terminal without an error, in the Windows terminal (command line) try:
echo console.log('\nHello world!')> hello.js
node hello.js
In the Linux terminal try:
echo "console.log('\nHello world\!\n')"> hello.js
node hello.js
Of course, expect to see the terminal responding:
Hello world!
In your third point, "T" cannot be resolved because its not declared, usually when you declare a generic class you can use "T" as the name of the bound type parameter, many online examples including oracle's tutorials use "T" as the name of the type parameter, say for example, you declare a class like:
public class FooHandler<T>
{
public void operateOnFoo(T foo) { /*some foo handling code here*/}
}
you are saying that FooHandler's
operateOnFoo
method expects a variable of type "T" which is declared on the class declaration itself, with this in mind, you can later add another method like
public void operateOnFoos(List<T> foos)
in all the cases either T, E or U there all identifiers of the type parameter, you can even have more than one type parameter which uses the syntax
public class MyClass<Atype,AnotherType> {}
in your forth ponint although efectively Sting is a sub type of Object, in generics classes there is no such relation, List<String>
is not a sub type of List<Object>
they are two diferent types from the compiler point of view, this is best explained in this blog entry
You haven't mentioned the Initial catalog
name in the connection string. Give your database name as Initial Catalog
name.
<add name ="AutoRepairSqlProvider" connectionString=
"Data Source=.\SQLEXPRESS; Initial Catalog=MyDatabase; AttachDbFilename=|DataDirectory|\AutoRepairDatabase.mdf;
Integrated Security=True;User Instance=True"/>
I have checked on Windows: Ctrl + F11 and Ctrl + F12 both are working to change the orientation of the Android simulator.
For other shortcut keys:
In the Eclipse toolbar go to "Help-->key Assist.. "
You can also use Ctrl + Shift + L here, so many shortcut keys of Eclipse are given.
There is a way to SELECT NOTHING that solve your problem.
When you want that Excel SELECT NOTHING do it:
MYDOC.Shapes("Ready").visible=True
MYDOC.Shapes("Ready").Select
MYDOC.Shapes("Ready").visible=False
This HIDE the selection and nothing still selected in your window PLUS: The word "Ready" is shown at the Left Top in your Sheet.
I would like to add that if the object that is created is static and not coming through http something like that can be done:
public fetchModel(uuid: string = undefined): Observable<string> {
if(!uuid) { //static data
return Observable.of(new TestModel()).map(o => JSON.stringify(o));
}
else {
return this.http.get("http://localhost:8080/myapp/api/model/" + uuid)
.map(res => res.text());
}
}
Edit: For Angular 7.x.x mapping needs to be done using pipe() as described here (https://stackoverflow.com/a/54085359/986160):
import {of, Observable } from 'rxjs';
import { map } from 'rxjs/operators';
[...]
public fetchModel(uuid: string = undefined): Observable<string> {
if(!uuid) { //static data
return of(new TestModel());
}
else {
return this.http.get("http://localhost:8080/myapp/api/model/" + uuid)
.pipe(map((res:any) => res)) //already contains json
}
}
from answer to my question about observers and static data: https://stackoverflow.com/a/35219772/986160
In Swift 4.2 and Xcode 10.1
let string:String = "789"
let intValue:Int = Int(string)!
print(intValue)
let integerValue:Int = 789
let stringValue:String = String(integerValue)
//OR
//let stringValue:String = "\(integerValue)"
print(stringValue)
There's a couple of ways you can do this. If the onchange
listener is a function set via the element.onchange
property and you're not bothered about the event object or bubbling/propagation, the easiest method is to just call that function:
element.onchange();
If you need it to simulate the real event in full, or if you set the event via the html attribute or addEventListener
/attachEvent
, you need to do a bit of feature detection to correctly fire the event:
if ("createEvent" in document) {
var evt = document.createEvent("HTMLEvents");
evt.initEvent("change", false, true);
element.dispatchEvent(evt);
}
else
element.fireEvent("onchange");
For UTF8 encoded JSON file using .NET Core 3.1, I was finally able to use JsonDocument based upon this information from Microsoft: https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-how-to#utf8jsonreader-utf8jsonwriter-and-jsondocument
string allLinesAsOneString = string.Empty;
string [] lines = File.ReadAllLines(filename, Encoding.UTF8);
foreach(var line in lines)
allLinesAsOneString += line;
JsonDocument jd = JsonDocument.Parse(Encoding.UTF8.GetBytes(allLinesAsOneString));
var writer = new Utf8JsonWriter(Console.OpenStandardOutput(), new JsonWriterOptions
{
Indented = true
});
JsonElement root = jd.RootElement;
if( root.ValueKind == JsonValueKind.Object )
{
writer.WriteStartObject();
}
foreach (var jp in root.EnumerateObject())
jp.WriteTo(writer);
writer.WriteEndObject();
writer.Flush();
In my PyCharm 2019.3, select the project, then File ---> Settings, then Project: YourProjectName, in 'Project Interpreter', click the interpreter or settings, ---> Show all... ---> Select the current interpreter ---> Show paths for the selected interpreter ---> then click 'Add' to add your library, in my case, it is a wheel package
Close, you can use
$('#select_2 option:selected').html()
I sometimes use kdesvn for work directly against a repository.
I often use Subclipse when working on projects via Eclipse.
But most of all I use good ol' CLI. With some aliases and bash scripts to back it up, it really is the most concise, reliable method of using svn.
I have tried NautilusSVN (no relation to NaughtySVN) and svn-workbench and found them too problematic or lacking in functionality. I know I tried RapidSVN at some point but I must not have been impressed as it was quickly uninstalled, but I don't remember anything about it.
It sounds like you're trying to link with your resulting object file with gcc
instead of g++
:
Note that programs using C++ object files must always be linked with g++, in order to supply the appropriate C++ libraries. Attempting to link a C++ object file with the C compiler gcc will cause "undefined reference" errors for C++ standard library functions:
$ g++ -Wall -c hello.cc
$ gcc hello.o (should use g++)
hello.o: In function `main':
hello.o(.text+0x1b): undefined reference to `std::cout'
.....
hello.o(.eh_frame+0x11):
undefined reference to `__gxx_personality_v0'
Source: An Introduction to GCC - for the GNU compilers gcc and g++
Remove obj
and just do this inside your for loop:
arr.push(i);
Also, the i < yearEnd
condition will not include the final year, so change it to i <= yearEnd
.
For me, the next worked well:
I wrapped the header and the content on a div
<div class="main-wrapper">
<div class="header">
</div>
<div class="content">
</div>
</div>
I used this reference to fill the height with flexbox. The CSS goes like this:
.main-wrapper {
display: flex;
flex-direction: column;
min-height: 100vh;
}
.header {
flex: 1;
}
.content {
flex: 1;
}
For more info about the flexbox technique, visit the reference
There is a way to use guards for individual (or multiple) attributes.
@debug: true;
header {
/* guard for attribute */
& when (@debug = true) {
background-color: yellow;
}
/* guard for nested class */
#title when (@debug = true) {
background-color: orange;
}
}
/* guard for class */
article when (@debug = true) {
background-color: red;
}
/* and when debug is off: */
article when not (@debug = true) {
background-color: green;
}
...and with Less 1.7; compiles to:
header {
background-color: yellow;
}
header #title {
background-color: orange;
}
article {
background-color: red;
}
I use this query in order to retrieve the server name of my Oracle database.
SELECT program FROM v$session WHERE program LIKE '%(PMON)%';
In PHP I like using mysqli_real_escape_string() which escapes special characters in a string for use in an SQL statement.
see https://www.php.net/manual/en/mysqli.real-escape-string.php
First off, please note that I haven't used either of them (but have used Node.js).
Both libraries are documented quite well and have a stable API. However, persistence.js seems to be used in more projects. I don't know if all of them still use it, though.
The developer of sequelize sometimes blogs about it at blog.depold.com. When you'd like to use primary keys as foreign keys, you'll need the patch that's described in this blog post. If you'd like help for persistence.js there is a google group devoted to it.
From the examples I gather that sequelize is a bit more JavaScript-like (more sugar) than persistance.js but has support for fewer datastores (only MySQL, while persistance.js can even use in-browser stores).
I think that sequelize might be the way to go for you, as you only need MySQL support. However, if you need some convenient features (for instance search) or want to use a different database later on you'd need to use persistence.js.
find . -name "*.txt"|while read fname; do
echo "$fname"
done
Note: this method and the (second) method shown by bmargulies are safe to use with white space in the file/folder names.
In order to also have the - somewhat exotic - case of newlines in the file/folder names covered, you will have to resort to the -exec
predicate of find
like this:
find . -name '*.txt' -exec echo "{}" \;
The {}
is the placeholder for the found item and the \;
is used to terminate the -exec
predicate.
And for the sake of completeness let me add another variant - you gotta love the *nix ways for their versatility:
find . -name '*.txt' -print0|xargs -0 -n 1 echo
This would separate the printed items with a \0
character that isn't allowed in any of the file systems in file or folder names, to my knowledge, and therefore should cover all bases. xargs
picks them up one by one then ...
The scripts mentioned in previous answers, like:
$("body, html").animate({
scrollTop: $(document).height()
}, 400)
or
$(window).scrollTop($(document).height());
will not work in Chrome and will be jumpy in Safari in case html
tag in CSS has overflow: auto;
property set. It took me nearly an hour to figure out.
In order to verify a client certificate is being sent to the server, you need to analyze the output from the combination of the -state
and -debug
flags.
First as a baseline, try running
$ openssl s_client -connect host:443 -state -debug
You'll get a ton of output, but the lines we are interested in look like this:
SSL_connect:SSLv3 read server done A
write to 0x211efb0 [0x21ced50] (12 bytes => 12 (0xC))
0000 - 16 03 01 00 07 0b 00 00-03 .........
000c - <SPACES/NULS>
SSL_connect:SSLv3 write client certificate A
What's happening here:
The -state
flag is responsible for displaying the end of the previous section:
SSL_connect:SSLv3 read server done A
This is only important for helping you find your place in the output.
Then the -debug
flag is showing the raw bytes being sent in the next step:
write to 0x211efb0 [0x21ced50] (12 bytes => 12 (0xC))
0000 - 16 03 01 00 07 0b 00 00-03 .........
000c - <SPACES/NULS>
Finally, the -state
flag is once again reporting the result of the step that -debug
just echoed:
SSL_connect:SSLv3 write client certificate A
So in other words: s_client
finished reading data sent from the server, and sent 12 bytes to the server as (what I assume is) a "no client certificate" message.
If you repeat the test, but this time include the -cert
and -key
flags like this:
$ openssl s_client -connect host:443 \
-cert cert_and_key.pem \
-key cert_and_key.pem \
-state -debug
your output between the "read server done" line and the "write client certificate" line will be much longer, representing the binary form of your client certificate:
SSL_connect:SSLv3 read server done A
write to 0x7bd970 [0x86d890] (1576 bytes => 1576 (0x628))
0000 - 16 03 01 06 23 0b 00 06-1f 00 06 1c 00 06 19 31 ....#..........1
(*SNIP*)
0620 - 95 ca 5e f4 2f 6c 43 11- ..^%/lC.
SSL_connect:SSLv3 write client certificate A
The 1576 bytes
is an excellent indication on its own that the cert was transmitted, but on top of that, the right-hand column will show parts of the certificate that are human-readable: You should be able to recognize the CN and issuer strings of your cert in there.
For me only way to delete project was switch language to English (UK) - from Polish and then button "DELETE" worked. If anyone have problem with not working or missing options in Google Cloud Platform I suggest switching to english after that everything works like charm...
In my case, I wanted to see .htaccess files, but not all the other .* resources.
In Zend Studio for Eclipse, in PHP Explorer (not Remote System Explorer), click the downward facing arrow (next to the left/right arrows).
Choose Filters.
Uncheck .* resources
In the "Name filter patterns" area, type the filenames you want to ignore.
I used:
.svn, .cvs, .DS_Store, .buildpath, .project
When we try to add an object to the arraylist,
Java checks to ensure that there is enough capacity in the existing array to hold the new object. If not, a new array of a greater size is created, the old array is copied to new array using Arrays.copyOf and the new array is assigned to the existing array.
Look at the code below (taken from Java ArrayList Code at GrepCode.com).
Edit:
public ArrayList() Constructs an empty list with an initial capacity of ten.
public ArrayList(int initialCapacity) we can specify initial capacity.
public ArrayList(Collection c) Constructs a list containing the elements of the specified collection, in the order they are returned by the collection's iterator.
Now when we use ArrayList() constructore we get a ArrayList with Size=10 On adding 11th element in the list new Arraylist is created inside ensureCapacity() method.
Using following formula:
int newCapacity= (oldCapacity * 3)/2 +1;
This evaluates to true if it already exists:
$("#yourSelect option[value='yourValue']").length > 0;
git reflog
-- this will list all last commit
e.g Head@{0} -- wrong push
Head@{1} -- correct push
git checkout Head@{1} .
-- this will reset your last modified files
git status
git commit -m "reverted to last best"
git push origin/master
No need to worry if other has pulled or not.
Done!
Each iteration of the forEach()
will call the function that you have supplied. To stop further processing within any given iteration (and continue with the next item) you just have to return
from the function at the appropriate point:
elementsCollection.forEach(function(element){
if (!element.shouldBeProcessed)
return; // stop processing this iteration
// This part will be avoided if not neccessary
doSomeLengthyOperation();
});
Jupyter has its own PATH variable, JUPYTER_PATH.
Adding this line to the .bashrc
file worked for me:
export JUPYTER_PATH=<directory_for_your_module>:$JUPYTER_PATH