XSLT 2.0: Limit the ancestor axes to a certain element/s level up the document tree

Question: I'm seeing a quite odd behaviour, when trying to limit the results given by applying ancestor::* to an element I always get an extra ancestor although is expressly excluded by the predicate.
Here the code:
XML:
<?xml version="1.0" encoding="UTF-8"?>
<root>
  <level_a>
    <level_b>
      <level_c>
        <level_d>
          <level_e/>
        </level_d>
      </level_c>
    </level_b>
  </level_a>
  <level_b>
    <level_c>
      <level_d>
        <level_d>
          <level_e/>
        </level_d>
      </level_d>
    </level_c>
  </level_b>
</root>

XPath:
(//level_d[not(level_d)])[last()]/ancestor::*[level_c|level_b]

so basically I'm selecting the level_d elements that doesn't have another level_d element nested, getting the last one of them and trying to get all the ancestors up to element level_b.
But the result I'm seeing using Altova XMLSpy 2011 is:

level_a
level_b

I don't quite understand why I'm getting that result and how can I improve my xpath to limit effectively the ancestors up to level_b (i.e. level_c and level_b).
Any hint is greatly appreciated!
Regards
Vlax
Answer: Well ancestor::*[level_c|level_b] selects all elements on the ancestor axis that have a level_c or level_b child.
You might want (//level_d[not(level_d)])[last()]/ancestor::*[self::level_c|self::level_b].
Or with your textual description "to limit effectively the ancestors to level_b" you simply want (//level_d[not(level_d)])[last()]/ancestor::level_b.
Comment: Thanks! the first suggestion was exactly what I was looking for. I will correct the description of what I'm trying to achieve because it's not accurate.
Answer: I think you get right result because clause ancestor::*[level_c|level_b] I read as "all ancestors containing element level_b or level_c". So, level_b is ok because it contains level_c and level_a is ok too because it contains level_b.
So if I change your XPath into (//level_d[not(level_d)])[last()]/ancestor::*[level_c] it results into level_b only.
Probably it is not exactly what you asking for but I'm not sure if I understand well the purpose of your XPath :-)
Comment: thanks for your answer, it was in the direction. @Martin go it right.


Chow-Liu trees and Kullback Leibler divergence

Question: I'm reading David Barber's book on Bayesian Reasoning and Machine Learning. At Section 9.5.4 he covers Chow-Liu trees, and I am having difficulties understanding the flow of the equations after he introduces KL divergence as a way to find the best approximating distribution. I have typed out the problem below.
Consider a multivariate distribution $p(x)$ that we wish to approximate with a distribution $q(x)$. Furthermore, we constrain the approximation $q(x)$ to be a BN in which each node has at most 1 parent. First we assume that we have chosen a particular labeling of D variables so that children have higher parent indices than their parents. The DAG single parent constraint then means:
$q(x) = \prod ^D_{i=1}q(x_i|x_{pa(i)})$
$pa(i)<i$ , or $pa(i) = \varnothing$, where $pa(i)$ is the single parent index of node $i$.
To find the best approximating distribution of this constrained class, we may minimise the KL divergence:
$KL(p|q) = \left \langle log\:p(x)\right \rangle_{p(x)} - \sum^D_{i=1}\left \langle  log\:q(x_i|x_{pa(i)})\right \rangle_{p(x_i, x_{pa(i)})}$
My question is if we are defining the KL divergence as
$KL(q|p) = \left \langle log\:q(x) - log\:p(x)\right \rangle_{q(x)}$
Then how did the subscript turn out to become ${p(x_i, x_{pa(i)})}$ and not $p(x_i)$ in the equation before this?
Answer: Since $\log q(x_i | x_{\text{Pa}(i)})$ is a function of the random variables $x_i$ and $x_{\text{Pa}(i)}$, we must take the expectation with respect to the joint distribution $p(x_i, x_{\text{Pa}(i)})$.
Here's the full sequence of equations.
$$
\begin{align*}
\text{KL}(p|q) & = \langle \log p(x) - \log q(x) \rangle_{p(x)} \\
& = \langle \log p(x) \rangle_{p(x)} - \langle \log q(x) \rangle_{p(x)} && \text{(linearity of expectation)} \\
& = \langle \log p(x) \rangle_{p(x)} - \left\langle \log \textstyle\prod ^D_{i=1}q(x_i|x_{\text{Pa}(i)}) \right\rangle_{p(x)} \\
& = \langle \log p(x) \rangle_{p(x)} - \left\langle  \textstyle\sum ^D_{i=1} \log q(x_i|x_{\text{Pa}(i)}) \right\rangle_{p(x)} \\
& = \langle \log p(x) \rangle_{p(x)} - \textstyle\sum ^D_{i=1} \langle \log q(x_i|x_{\text{Pa}(i)}) \rangle_{p(x)} && \text{(linearity of expectation)} \\
& = \langle \log p(x) \rangle_{p(x)} - \textstyle\sum ^D_{i=1} \langle \log q(x_i|x_{\text{Pa}(i)}) \rangle_{p(x_i, x_{\text{Pa}(i)})}
\end{align*}
$$
where, again, the last equality follows from the fact that $\log q(x_i | x_{\text{Pa}(i)})$ depends only on $x_i$ and $x_{\text{Pa}(i)}$ rather than all of $x$.


Evaluate $\int _0^1\int _0^1\int _0^1\int _0^1\sqrt{(z-w)^2+(x-y)^2} \, dw \, dz \, dy \, dx$

Question: This page contains an interesting identity$$\int _0^1\int _0^1\int _0^1\int _0^1\sqrt{(z-w)^2+(x-y)^2} \, dw \, dz \, dy \, dx=\frac{1}{15} \left(\sqrt{2}+2+5 \log \left(\sqrt{2}+1\right)\right)$$
Which calculates the average distance between two random points in the unit square. I'm wondering if there's an elementary solution? Any help will be appreciated.
Comment: [This page](https://mindyourdecisions.com/blog/2016/07/03/distance-between-two-random-points-in-a-square-sunday-puzzle/) provides an excellent explanation.
Comment: Since you already have an answer, you could change the question to ask for alternative methods to arrive at the answer.
Comment: Related: https://math.stackexchange.com/questions/1254129/average-distance-between-two-random-points-in-a-square/1254154#1254154
Comment: Also see https://math.stackexchange.com/questions/1294800/average-distance-between-two-randomly-chosen-points-in-unit-square-without-calc?.
Answer: By symmetry:
$$I=4\int _0^1\int _0^1\int _0^x\int _0^z\sqrt{(z-w)^2+(x-y)^2} \, dw \,  dy \, dx dz$$
Substituting $w \to z w, \quad y \to x y$:
$$I=4\int _0^1\int _0^1\int _0^1\int _0^1\sqrt{z^2(1-w)^2+x^2(1-y)^2}~ x z \, dw \,  dy \, dx dz$$
Substituting $w \to 1-w, \quad y \to 1-y$:
$$I=4\int _0^1\int _0^1\int _0^1\int _0^1\sqrt{z^2 w^2+x^2 y^2}~ x z \, dw \,  dy \, dx dz$$
Substituting $x^2 = u, \quad z^2 = v$:
$$I=\int _0^1\int _0^1\int _0^1\int _0^1\sqrt{v w^2+u y^2}~ \, dw \,  dy \, du dv$$
Substituting $v w^2=p, \quad u y^2=q$:
$$I=\int _0^1\int _0^1\int _0^{y^2}\int _0^{w^2}  \sqrt{p+q}~ \, dp dq \frac{dy dw}{y^2 w^2}$$
$$I=\frac{2}{3} \int _0^1\int _0^1\int _0^{y^2}\left((q+w^2)^{3/2}-q^{3/2} \right) dq \frac{dy dw}{y^2 w^2}$$
$$I=\frac{4}{15} \int _0^1\int _0^1\left((y^2+w^2)^{5/2}-y^5-w^5 \right)  \frac{dy dw}{y^2 w^2}$$
By symmetry:
$$I=\frac{8}{15} \int _0^1\int _0^w\left((y^2+w^2)^{5/2}-y^5-w^5 \right)  \frac{dy dw}{y^2 w^2}$$
Substituting: $y = w s$:
$$I=\frac{8}{15} \int _0^1\int _0^1 w^2 \left((1+s^2)^{5/2}-s^5-1 \right)  \frac{ds dw}{s^2 }$$
$$I=\frac{8}{45} \int _0^1 \left((1+s^2)^{5/2}-s^5-1 \right)  \frac{ds }{s^2 }$$
The last single integral can be evaluated by different methods, and the result agrees with the one from the OP.
One good method here is integration by parts. I leave this as an exercise.


get web page content using php script and save it in my db

Question: I want to get the content of this 1st and 2nd webpage https://www.goodreads.com/search?utf8=%E2%9C%93&q=%D8%B3%D9%8A%D8%A7%D8%B3%D8%A9&search_type=books
and then store it in my database and then make the list is searchable.so after I googled I found that I can do it like this
$url = "https://www.goodreads.com/search?utf8=%E2%9C%93&q=%D8%B3%D9%8A%D8%A7%D8%B3%D8%A9&search_type=books";

function get_links($url){

$input = file_get_contents($url);
echo $input;
}

get_links($url);

my problem is how can I get the 2nd page content also and how can I store these books in my database to the list searchable
Answer: The answer is not that easy...
Options
Getting the pages (Not recommended)
To get a later page you can send the "page argument" in your request:
e.g.:
https://www.goodreads.com/search?page=2&q=%D8%B3%D9%8A%D8%A7%D8%B3%D8%A9&search_type=books&tab=books&utf8=%E2%9C%93
But to get the Elements into a nice structure you need to parse the HTML you get which is realy hard.
Use the API (recommended)
At https://www.goodreads.com/api/index you can find the documentation for goodreads API which returns example as response and is easily parseable.
Parse XML in PHP
If you use the API you can parse the XML-response with SimpleXML.
See example 1 & 2: http://php.net/manual/en/simplexml.examples-basic.php
Saving to database
If you are a beginner you might read some tutorials about how to use mysql with php and PDO. But you may also have a look at RedBeanPHP which is an really easy to use ORM for databases.
Answer: For getting 2nd page you will have to append on the url ?page=2
In case that you need to get other pages, you can use a for loop if you don't know how to use for loop, please google php for loop
For the database, google php mysql insert
Comment: Actually I know how to use mysqli and PDO but this my first time to deal with task like this I am trying to see the easiest way to do it so if you have another answer I would like to see it
Comment: @nebulak and I already answered the question. I guess you want an answer, so you just copy and paste it. Pretty much you are asking someone to do your work/homework for free. Got it! In that case, no, I don't have another answer. And btw, please read SO best practices on how to ask. You might not compliance with some the rules.
Comment: By another answer l meant tutorial that explain it or links should I look at it or topics should I google thats it.
Comment: Please read again @nebulak 's answer. He is telling you what to do and what you need to read. Or you can search API with php and than you have to read goodreads API documentation (pretty good documentation)


If $G : \mathcal{D} \to \mathcal{C}$ has a left adjoint then $G$ preserves kernels.

Question: The theorem 7.7 in Course an homologic algebra of Peter Hilton is
If $G: \mathcal{D} \to \mathcal{C}$ has a left adjoint then G preserves products,
pull-backs and kernels.
Hilton prove that $G$ prerserves products and pull backs and leave the proof that $G$ preserv kernel as exercise. How can I prove that $ G $ preserves the kernel? There are some demonstrations with notions of limits and colimites, but they are notions that are not used in the book. I want to try it without using the concepts of limits and colimites. How can I do it?
Comment: You can define kernels in terms of pullbacks and products, so, other than demonstrating this, you're done. That said, it's actually pretty straightforward to prove that right adjoints preserve all limits. The proofs given for products and pullbacks presumably look similar and there would be a similar proof for kernels since they are likely all the same proof just instantiated differently.
Answer: $\mathcal{C}$ and $\mathcal{D}$ should admit zero object. Let $\eta: F \dashv G$.
We are going to show two things:

$G$ preserves zero objects hence zero morphisms.
$G$ preserves equalizers, i.e. if $f$ is the equalizer of $\varphi_1$ and $\varphi_2$ then $Gf$ is the equalizer of $G\varphi_1$ and $G\varphi_2$.

It's easy to see that $f$ is the kernel of $\varphi$ iff $f$ is the equalizer of $0$ and $\varphi$. Then the original statement is proved.

Proof of 1.
Let $Z$ be the zero object in $\mathcal{D}$ and $N$ an object in $\mathcal{C}$. Since $\eta : Hom(FN,Z) \rightarrow Hom(N,GZ)$ is bijective, $\left| Hom(N,GZ)\right| = \left| Hom(FN,Z)\right| = 1$. Therefore $GZ$ is terminal object hence zero object. It immediately follows that $G$ preserves zero morphisms.

Proof of 2.
Let $f$ be the equalizer of $\varphi_1$ and $\varphi_2$. For any $\tau$ such that $G\varphi_1 \circ  \tau = G\varphi_2 \circ \tau$, we have $\varphi_1 \circ \eta^{-1}\tau = \varphi_2 \circ \eta^{-1}\tau$ by naturality of $\eta^{-1}$. So there is a unique morhism $\tau_0$ such that $f \circ \tau_0 = \eta^{-1}\tau$. Again, by bijectivity and naturality of $\eta$, $\eta\tau_0$ is the unique morphism such that $Gf \circ \eta\tau_0 = \tau$, so $Gf$ is the equalizer of $G\varphi_1$ and $G\varphi_2$.


What are the possible values of the rank of A?

Question: The characteristic polynomial of a matrix $A \in M_5(R)$ is given by $x^5 + αx^4  + βx^3$
 where α and β are non-zero real numbers. What are the possible
values of the rank of $A$?
My attempt ;
  here  I got  three basis vectors: $(0,0,α,0,0) ,(0,0,0,β,0)$ and $(0,0,0,0,1)$,
so there are three  linearly independent vectors, so  as by rank nullity theorem
Rank of $A = 3$
is my answer is correct or not , i would be more thankful who will rectify my mistakes...
Comment: There is more than one possible rank.
Comment: When you say "i got three basis (vectors) (0,0,α,0,0) ,(0,0,0,β,0) and (0,0,0,0,1)", you surely mean basis vectors of the range of $A$, but how can you assert this ?
Comment: nullity A= 2 and  dimv = 5  so rank of A =3 @ jean marie
Answer: $x^3(x^2+\alpha x+\beta)$.  You can find the dimension of the kernel. If  $\beta\neq 0$ you have two eigenvalues ( eventually one double) distinct of $0$, so the rank is greater than $2$ and inferior or equal to $4$ since one eigenvalue is zero.
if $\beta=0$ and $\alpha\neq 0$ the characteristic polynomial is $x^4(x+\alpha)$ you have an eigenvalue different of zero, so the rank is superior to $1$ and inferior or equal to $4$.
If $\alpha=\beta=0$, the characteristic polynomial is $x^5$ the rank is inferior to $4$.
Comment: thanks @ tsemo aristide,,,,,,im not gettingthe line   ( eventually one double) distinct of 0..
Comment: think about $(x-2)^2$ it has a double root.
Comment: that mean rank will be 2  ,,, how can u claim that rank is greater than 2@ tsemo aristide
Comment: Yes because $A^3=0$ does not imply that the rank of $A$ is zero.
Comment: ok thanks ..that mean rank will be 2, 3 ,,,,,but im not getting how  rank of A = 4 @ TSEMO ARISTIDE


I am having trouble with TextField in Jetpack Compose and Material 3

Question: I'm new to compose, and I'm mostly trying to follow along with tutorials to get a hang of the various components.  I have a simple function that just defines a text field, and I can't get it to compile if I add some parameters.  Here is an example:
package com.example.jettip.components

import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.TextField
import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardType

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun InputField(
    modifier: Modifier = Modifier,
    valueState: MutableState<String>,
    labelId: String,
    enabled: Boolean = true,
    isSingleLine: Boolean = true,
    keyboardType: KeyboardType = KeyboardType.Text,
    imeAction: ImeAction = ImeAction.Default,
    onAction: KeyboardActions = KeyboardActions.Default,

) {
    var text by remember { mutableStateOf("") }

    TextField(
        value = valueState.value,
        onValueChange = { text = it },
        modifier = modifier,
        enabled = enabled,
        //keyboardType = keyboardType,
        keyboardActions = onAction,
        )

}

This compiles fine, but if I uncomment the keyboardType parameter, I get errors.
First of all, this line has an error on it:
onValueChange = { text = it },

The "it" parameter is red with the error, "Unresolved reference: it"
This makes no sense to me, unless I have something really wrong configured in my Studio
I also get the error "None of the functions can be compiled with the arguments supplied"
Maybe keyboardType needs to go with another parameter, but I can't tell from the documentation.
I started with a blank activity project created by Studio.  I have the latest Studio.  Do I need to do something with my gradle files?
Thanks.
Comment: BTW, does anyone know why I have to accept experimental M3 before I can use a text field?  I started with the default project built by Studio, and I would think that would have the latest dependencies.  Do I need to change something in my Gradle file?
Comment: @OptIn(ExperimentalMaterial3Api::class)
Comment: as it sad when you click on that "ExperimentalMaterial3Api" -> "This material API is experimental and is likely to change or to be removed in the future." It still an "Experimental" usecase.
Answer: For this it more like a stateful component

var text by remember { mutableStateOf("") }

If you wish to use it should be try :

{ valueState.value = it } // For delegate

base on the Android Docs it does mention delegate to the caller to update it value.
Note: For M3 things it's not much different from M2
It may be got the same name but it may need another wrapper for it.
Try This code below for M3
@OptIn(ExperimentalMaterial3Api::class)
    @Composable
    fun InputField(
        modifier: Modifier = Modifier,
        valueState: MutableState<String> = remember { mutableStateOf("") },
        labelId: String,
        enabled: Boolean = true,
        isSingleLine: Boolean = true,
        keyboardType: KeyboardType = KeyboardType.Text,
        imeAction: ImeAction = ImeAction.Default,
        onAction: KeyboardActions = KeyboardActions.Default,
        ) {
        TextField(
            value = valueState.value,
            onValueChange = { valueState.value = it },
            modifier = modifier,
            enabled = enabled,
            keyboardActions = onAction,
            keyboardOptions = KeyboardOptions(keyboardType = keyboardType)
        )
    }

Comment: That worked.  Instead of "keyboardType = keyboardType" I used "keyboardOptions = KeyboardOptions(keyboardType = keyboardType)".  I'm still not sure why the original way fails and why it causes the error on the "onValueChange = { text = it }" line.
Comment: Please check the type of that "text'.


What note is this and how many counts does this have?

Question: How many counts do this note get and what is the note called? I'm confused
Comment: Can you post a better picture?  Maybe take a screenshot instead of a picture of your screen.  This looks more like a quilt than sheet music.
Comment: If you zoom out, it looks just like a triplet 8th, triplet 8th rest, and another triplet 8th.  That might be enough info for OP to find the answer
Comment: Could you try to show an image with higher quality, but also showing at least one whole measure. A title and composer name or other reference could be helpful as well.
Comment: @NadiaB providing a *big* and magnified image taken from a screen is *not* really helpful. On the contrary, you'll get the exact opposite. For future reference, learn how to properly get screen captures on your device/computer, or provide a smaller photo - in any case, ensure that what's displayed is *actually* visible and recognizable.
Comment: I updated the picture
Comment: Importantly, what clef does this measure use? Treble? Bass? Alto? Tenor? A percussion clef?
Answer: Not the clearest of pictures!   But I think it's this?  Here's a whole 4-beat bar's worth of them:

Triplet 8ths, with the middle one replaced by a rest.
'One-and-a, Two-and-a, Three-and-a, Four-and-a'  with the 'ands' missing.
Comment: This is it. The blob in between must be the blob part of the quaver rest, which surely must be apparent in a proper size picture.. +1.
Answer: This seems pretty much like a triplet of eighths notes, where the middle one is a rest and the outer notes share the beam.
In total the length is equal to that of a quarter note.


Let $a_0,a_1,\dots,a_n$ and $b_0,b_1,\dots,b_n$ be sequences of real number.

Question: Let $a_0,a_1,\dots,a_n$ and $b_0,b_1,\dots,b_n$ be sequences of real number. Suppose $a_0=b_{2020}$ and $b_0=a_{2020}$ and that $\displaystyle a_n=\frac{\sqrt{2n-1}}{2}+a_{n-1}$ and $\displaystyle b_n=\frac{\sqrt{2n-1}}{1010}-b_{n-1}$ for $n=1,2,\dots,2020$. Find $\displaystyle\sum_{k=1}^{2020}(a_kb_{k-1}-a_{k-1}b_k)$.
My attempt:
Let $$S_{2020}=\sum_{k=1}^{2020}(a_kb_{k-1}-a_{k-1}b_k)$$
then
\begin{align*}
S_{2020}&=\sum_{k=1}^{2020}\left(\frac{a_{k-1}\sqrt{2k-3}}{1010}-\frac{b_{k-2}{\sqrt{2k-1}}}{2}-\frac{a_{k-2}\sqrt{2k-1}}{1010}-\frac{b_{k-1}{\sqrt{2k-3}}}{2}\right)-S_{2019}+(a_1b_0-a_0b_1)
\end{align*}
Answer: Given two relations can be rearranged and multiplied to give $$(a_k-a_{k-1})(b_k+b_{k-1})=\frac{2k-1}{2020}$$
$$(a_kb_k-a_{k-1}b_{k-1}) + (a_kb_{k-1}-a_{k-1}b_k)=\frac{2k-1}{2020}$$
Now summing over,
$$\sum_{k=1}^{2020} (a_kb_k-a_{k-1}b_{k-1}) + \sum_{k=1}^{2020} (a_kb_{k-1}-a_{k-1}b_k) = \sum_{k=1}^{2020} \frac{2k-1}{2020}$$
The first sum telescopes. The second term is our desired sum, $S$. RHS is a multiple of sum of first $2020$ odd numbers, which is simply $2020^2$.
$$(a_{2020}b_{2020}-a_0b_0) + S =2020$$
Since $a_{2020}=b_0$ and $b_{2020}=a_0$, $$\boxed{S=2020}$$


SSH between two servers Linux and AIX

Question: I am trying to do passwordless SSH between two server Linux (source) and AIX (destination)
For this i have created public key in Linux server and coped this public key in destination server user profile (in path .ssh/authorized_keys).Also this file is given proper permission.
In /etc/ssh/sshd_config i have uncommented  below
PubkeyAuthentication yes
AuthorizedKeysFile        .ssh/authorized_keys

But when i am trying to to SSH from Linux to AIX i am getting below error
ssh user@AIX-server ls -a
Permission denied, please try again
Permission denied, please try again
Permission denied (publickey,password,keyboard-interactive,hostbased)

some debug logs
debug1: Trying next Authentication method: publickey
debug1:  Trying public key
debug2: We did not sent packet, disable method

Comment: "Also this file is given proper permission."  What about the directory?  What version of sshd is running on the AIX server?
Comment: @Gerard.Permission given to directory also.How to check what version of sshd running in linux.
Comment: What permission did you give to the directory?  What version of sshd is running on AIX?
Comment: @Gerard 700 for .ssh and 640 for .ssh/authorized_keys.How to check what version of sshd running on AIX ?
Comment: "/usr/sbin/sshd -d" may reveal enough: "debug1: sshd version OpenSSH_7.9, OpenSSL 1.1.1d  10 Sep 2019"
Comment: Permissions on authorized_keys may need to be 600.
Comment: @GerardH.Pille SSH version is openSSH_7.4p1.I have also added some debug logs in my main question.
Comment: Generally I tend [to point to this answer of mine](https://unix.stackexchange.com/a/128910/5462) for SSH troubleshooting.
Comment: On the client side, what uncommented lines do you have in /etc/ssh/ssh_config and .ssh/config ?
Answer: Try restarting the SSHD service sudo systemctl restart sshd.
Answer: After the configuration change you should restart the sshd service on AIX
restartsrc -s sshd

Also, you may have forgotten the home directory for the AuthorizedKeysFile
AuthorizedKeysFile  %h/.ssh/authorized_keys

Comment: we have tried restarting sshd in AIX.But still facing same issue.
Comment: @AWS_Beginner this sort of information belongs edited _into_ your question, though.

SSH between two servers Linux and AIX


php code not indenting in adobe brackets

Question: I am using Adobe Brackets 1.0 code editor.
I have .php pages that include HTML & PHP lines.
HTML lines indenting fine BUT PHP lines do not indent correctly!
is there any extension or way to force PHP lines to indent correctly?
I've used and tried the following extensions but non of them did the job:

[PHP-SIG] PHP SmartHints
PHP Syntax Hint
QuickDocsPHP
QuickDocsRegEx
Tab tags
WordHint

Thanks
P.S. I can't believe such good editor lack this important feature & functionality out-of-the-box.

UPDATE after Nicolò's answer:

Before using "Indentator" extension (Manual indentation)

After installing "Indentator" extension and applying Ctrl + Alt + i
Comment: why the down-voting?!!! what is wrong with the question? every one is free to down vote any question if he/she think it is off-topic or badly submitted or *for any other reason* **BUT** be helpful and brave by explaining why you down vote it so we can avoid the mistakes in the future!!!!!!!
Comment: Don't get mad, there are people up voting as well. I up voted too, because I have the same question about indenting PHP in brackets. By the way, I think the Indentator's result is reasonable because the PHP code has its own scope and it should be different from HTML in terms of large chunk of PHP code.
Answer: Try to install the "Indentator" extension and press Ctrl+Alt+i
UPDATE After SULTAN's update:
There is an issue on GitHub about this problem:
https://github.com/adobe/brackets/issues/10038
Comment: Sorry, didn't work.  I'll update the question with two images showing the results.
Answer: I found a workaround to indent php codes
all what I had to do is to wrap the php code inside {}
Example

      <?php
      {
        //your php code here;
        //next lines will be indented correctly;
      }
      ?>

          <?php
          {
            //php code here;
            //another php line;
          }
          ?>

I found this way works fine with me and not causing any issues to the codes or to the pages.
Hope this helps


jquery remove text between tags

Question: I have such html:

  2012: Ice Age

   blah blah

     This text should disappear!!!

How to I remove that text with Jquery? I don't have a control over this code, so I cannot add any IDs for easier selection..
Comment: Why would you assume he's using xhtml?
Comment: I think I just dropped  tag while pasting..
Comment: as well as the  tags which should be like so (in xhtml):
i assume you're using xhtml....
Comment: br tags have no closing..that's what I get..
Comment: @Ben7005 is right. For XHTML, it should be
Comment: I get xml feed, and some js converts it to such broken HTML. I guess I should take some time and look into that script to fix broken tags..
Comment: This isn't necessarily broken, depending on your doctype.
Answer: $('li').contents().last().remove();

If it is at the end, you can use the contents()[docs] method (which gets all children, including text nodes, and the last()[docs] method to target the last one.
Example: http://jsfiddle.net/KtTfQ/

EDIT:
You could also just empty the content of that text node:
$('li br:last-child')[0].nextSibling.nodeValue = '';

Example: http://jsfiddle.net/KtTfQ/2/
Answer: It's easiest done with plain old DOM manipulation:
var text = $("li").get(0).lastChild;
text.parentNode.removeChild(text);

Fiddle: http://jsfiddle.net/LBxqa/1/

jquery remove text between tags


Erro de compilação em código no Unity

Question:
esta asim
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{

    void Awack()
    {
            floorMask = LayerMask.GetMask ("Floor");

            anim = getComponet <Animator> ();
            playerRigidbody = GetComponent <Rigidbody> ();
    }

    void FixedUpdate ()
    {

        float h = Input.GetAxisRaw ("horizontal");
        float v = Input.GetAxisRaw ("vertical");

        Move (h, v);
        Turning ();
        animating (h, v);
    }
     void (float h, float v)
        {
                movement.Ser(h,0f,v);

                movement = movement.normalized * speed * Time.deltatime;

                playerRigidbody.MoviPosition (transform.position + movement);
        }
    void Turnig ()
    {
                Ray camRay = Camera.main.screenPointToRay(Input.mousePosition);

                RaycastHit floorHit;

        if(Physics.Raycast(camRay,out floorHit.camRayLenght.floorMask))
        {
            Vector3 playerToMouse = floorHit.point - transform.position;
            playerToMouse.y = 0f;

            Quaternion newrotation = Quaternion.LookRotation(playerToMouse);
            playerRigidbody.MoveRotation(newrotation);

        }

    }

    void animating(float h,float v)

    {
        bool walking = h != 0f.v!=0f;

        anim.SetBool("IsWalking",walking);

    }

}

Comment: @mauricio-s-c-vedoy, Bem vindo ao StackOverflow PT (SOPT) faça um [tour](http://pt.stackoverflow.com/tour) para conseguir entender qual a melhor forma de perguntar e de responder.
Comment: Se você for postar aqui cada erro mínimo de digitação que você encontrar vai ficar difícil te ajudar. Essa eu até entendo que não seja tão óbvio mas postar erro porque falta um `;` é exagerado.
Comment: Dê uma olhada no [tour]. Você pode aceitar uma resposta se ela resolveu seu problema. Você pode votar em todos os posts do site também. Alguma lhe ajudou mais? Precisa que algo seja melhorado?
Answer: Fica difícil ajudar só com isto mas uma coisa que está errada com certeza é isto: bool walking = h != 0f.v!=0f;. Este problema específico provavelmente resolve assim:
void animating(float h, float v) => anim.SetBool("IsWalking", h != 0f || v != 0f);

Coloquei no GitHub para referência futura.
O código está mal organizado e dificulta a leitura.

Erro de compilação em código no Unity


Realizar ação para cada linha em uma busca SQL - VB

Question: gostaria de saber se alguém pode me ajudar com a seguinte questão.
Em um código VB, quero realizar a busca de produtos em uma tabela SQL. Pra cada produto encontrado eu gostaria de adicionar um botão em um painel.
Se isso não for possível, eu consigo "personalizar" um datagrid(?) tipo o exemplo abaixo?

Alguém pode me ajudar?
Agradeço desde já a atenção.
Answer: Tem uma solução em VBA que adaptei abaixo e que pode ser adaptada também para o teu caso, a referência vem de uma pergunta que fiz e foi respondida pelo Luiz Vieira, veja no link abaixo.
Como criar eventos dinamicamente no VBA/Excel
A ideia é criar dinamicamente um botão para cada imagem ou posição no 'grid', que irá depender de quantos resultados irá encontrar em cada busca.
Primeiro crie um módulo de classe que nomeei de DynamicCommandButton (os códigos abaixo estão feitos para o VBA do Excel)
Public WithEvents CommandButtonClick As msforms.CommandButton
'Declaração da propriedade/atributo da classe

Private Sub CommandButtonClick_Click()
'Será a propriedade/atributo de cada CommandButton criado
'Neste caso está associado ao evento Click

    ActionCommanButton CommandButtonClick.Name
    'Procedure que deseja executar para o botão acionado

End Sub

Private Sub ActionCommanButton(ButtonName As String)

    Beep

    MsgBox "Você clicou no Botão " & ButtonName & "!"

End Sub

No formulário coloque assim:
Dim CommandButtons() As New DynamicCommandButton
'O módulo de Classe que contém o evento Click para o CommadButton

Private Sub CreateCommandButtons(ByVal NumberOfCommandButtons As Integer)
'Esta procedure cria quantos botões desejar

    Dim i As Integer

    Dim NewButton As Control

    ReDim CommandButtons(0 To NumberOfCommandButtons - 1)

    For i = 0 To NumberOfCommandButtons - 1

        Set NewButton = Me.Controls.Add( _
          "Forms.CommandButton.1", _
          "NewButton" & i)

        With NewButton
          .Caption = "NewButton" & i
          .Top = 50 * i + 30
          .Left = 30
        End With

        Set CommandButtons(i).CommandButtonClick = NewButton

    Next i

End Sub

Private Sub UserForm_Activate()

    CreateCommandButtons 4

End Sub

Observação: você deverá adaptar esta procedure para passar a posição X e Y de cada botão que deseja criar por trabalhar em 'grid', aqui no caso ele cria um botão abaixo do outro. Neste exemplo solicitei 4 botões para serem criados.
Este é o resultado:

Portanto, basta ter as coordenadas X e Y de cada posição a colocar o botão e adaptar a rotina para criá-los nestas posições.
Comment: Obrigado Leo! Desculpa pela demora, alguns imprevistos me impossibilitaram de responder, perdão.  Seu código me ajudou e consegui realizar oq precisava graças a sua ajuda, Obrigado!
Comment: De nada amigo, excelente que tenha te ajudado! Você é iniciante aqui no SOPT, leia a Ajuda, veja que pode votar nas perguntas e respostas, isso ajuda a comunidade a avaliar a importância delas.


Closed convex hull in the space of probability measures

Question: In the book Gradient flows: In Metric spaces and in the space of probability measures of Ambrosio, Gigli and Savaré, one can read (Remark 5.1.2) that for $\mathcal K\subset \mathcal P(X)$, one has:
$$\mu\in\overline{\text{Conv}}(\mathcal K)\Leftrightarrow \int_Xfd\mu\leq\sup_{\nu\in\mathcal K}\int_Xfd\nu,\quad \forall f\in C^0_b(X),$$
where $C^0_b(X)$ is the space of bounded continuous functions $f:X\to\mathbf R$.
The authors claim that this comes from Hahn-Banach theorem, but I do not see why...
Can you help me ? For information, I understand the beginning of Remark 5.1.2, namely that narrow convergence is induced by the weak* topology of $(C_b^0(X))'$.
Answer: This is a partial solution (in one direction) to the OP. Details about the  notion of weak, weak* and the Hahn-Banach theorems can be found in many books on functional analysis. For example, chapter 3 of Rudin, W. Functional Analysis, 2nd edition, McGraw-Hill, 1973.

Some generalities:
Presumably $\mathcal{P}(X)$ is the space of (Borel) probability measures on a complete separable metric space with the topology inhaireted by the week topology induced by $\mathcal{C}_b(X)$.
$\mathcal{P}(X)$ is a closed and convex subspace of the (locally convex by design) linear space of all complex  measures $\mathcal{M}(X)$ (or only  real signed measures of total finite variation if considering only real linear spaces) with the weak topology induced by $\mathcal{C}_b(X)$. A local basis for this topology are sets of the form
$$\{\mu\in\mathcal{M}(X): |f_k(\mu)|<\varepsilon,\;f_k\in\mathcal{C}_b(X),\,1\leq k\leq n\}$$
for $n\in\mathbb{Z}_+=\mathbb{N}\cup\{0\}$.
Conversely, the dual of $\mathcal{M}(X)$ with the aforementioned weak topology is $\mathcal{C}_b(X)$. Under the  weak* topology on $\mathcal{C}_b(X)$ (induced by $\mathcal{M}(X)$), the dual of $\mathcal{C}_b(X)$ is $\mathcal{M}(X)$.

One direction to the problem in the OP:
By the Hahn-Banach separation theorem (Theorem 3.4(b) in the reference), if $\mu\notin \overline{\operatorname{co}(K)}$ then there is there is a functional $f\in\mathcal{M}^*(X)=\mathcal{C}_b(X)$ and real constants $s<t$ such that
$$\operatorname{Re}(f(\nu))\leq t<s\leq\operatorname{Re}(f(\mu))$$
for all $\nu\in\overline{\operatorname{co}(\mathcal{K})}$.
The real value function $\operatorname{Re}$ may be removed if only real (signed) measures of total finite variations are considered.
Comment: Thanks for the answer. If $\mu\notin \overline{Co}(K)$  then by Hahn-Banach theorem, $\exists f\in C_b(X)$ s.t. $\int_Xfd\nu <\int_Xfd\mu\ \forall\nu\in\overline{Co}(K)$. This shows
$$\forall f\in C_b(X), \int_Xfd\mu\leq\sup_{\nu\in\overline{Co}(K)}\int_Xfd\nu\Rightarrow\mu\in\overline{Co}(K).$$
To show the other implication, suppose that $\exists f\in C_b(X)$ s.t. $\forall\nu\in\overline{Co}(K), \int_Xfd\mu>\int_Xfd\nu$. Then $\nu\notin\overline{Co}(K)$, otherwise we would have a contradiction with $\nu=\mu$.
Is that correct ? It remains to show that $\sup_{\overline{Co}(K)}=\sup_K$.
Comment: @Arnaud: Notice that if $\mu_1,\mu_2\in K$, for example, then $t\mu_1f +(1-t)\mu_2f\leq t\sup_{\mu\in K}\mu f+ (1-t)\sup_{\mu\in K}\mu f=\sup_{\mu\in K}\mu f$. The conclusion would follow by continuity of the functional $\mu\mapsto \mu f=\int f\,d\mu$.
Comment: Great! Thank you!


How to reduce the error of tensorflow model?

Question: Who can suggest how to improve the model?
The regular model in sklearn LinearRegression() predicts temperature with an error of 1 and the error of the model built manually on tensorflow won't drop below 5.5, no matter the activation function, the number of layers, or epochs.
The data was both standardized and derived into positive values
def createModelG(inputShape, dropout, initW):
    model = Sequential()
    model.add(Dense(4096,
        kernel_regularizer=keras.regularizers.l2(0.001),
        activation = 'elu',
        kernel_initializer = initW,
        input_dim = inputShape
    ))
    model.add(Dropout(dropout))

    #for i in range(3):
    #    model.add(Dense(512, activation = 'relu'))
    #    model.add(Dropout(dropout))

    model.add(Dense(1024,
        kernel_regularizer=keras.regularizers.l2(0.001),
        activation = 'elu'
    ))
    model.add(Dropout(dropout))
    model.add(Dense(1))
    model.compile(
        loss = 'mae',
        optimizer = tf.keras.optimizers.Adam(learning_rate = 0.0000005),
        metrics = ['mse', 'mae']
    )
    return model

startModelTest = crossValdation(createModelG, trainDataXS, 0.01, 'truncated_normal', 'VancouverT', PrintDot())
modelTest = startModelTest[1]
hist = startModelTest[2]
startModelTest[0]

    loss    mse mae val_loss    val_mse val_mae
0   22.6255 737.889 21.3214 7.32549 55.3201 6.02149
1   21.6446 677.313 20.3387 7.83092 64.0345 6.5251
2   21.1013 646.857 19.7952 7.00224 49.6842 5.69622
3   22.3446 712.008 21.0386 8.07596 68.7968 6.77008
4   24.2565 874.824 22.9531 7.71605 65.3973 6.41274
0   --- --- --- --- --- ---
0   22.3945

link to all code and result of my keras model and ready sklearn models:
https://www.kaggle.com/alihanurumov/weather-prediction-network
Comment: You need to add a few details to your question; there is no information on the actual data, what is the error term used, the sklearn code or the training/test code implemented. You should also remove the images and replace with code and output.
Comment: I came up with)) I will attach a link to the full code. Where can I see how much worse my model on Keras Tensor flow works (((
Answer: def createModelG(inputShape):
    model = Sequential()
    model.add(Dense(4096, input_dim = inputShape,
                    kernel_initializer = initializers.glorot_uniform(seed = 1),
                    kernel_regularizer = keras.regularizers.l2(0.01), activation = "relu"))
    model.add(Dense(2048,
                    kernel_initializer = initializers.glorot_uniform(seed = 1), activation = "relu"))
    model.add(Dense(2048,
                    kernel_initializer = initializers.glorot_uniform(seed = 1), activation = "relu"))
    model.add(Dense(1024,
                    kernel_initializer = initializers.glorot_uniform(seed = 1), activation = "relu"))
    model.add(Dense(1024,
                    kernel_initializer = initializers.glorot_uniform(seed = 1), activation = "relu"))
    model.add(layers.Dropout(0.05))
    model.add(Dense(1))
    optimizer = tf.keras.optimizers.Adam(learning_rate = 0.000001)
    model.compile(loss = 'mse', optimizer = optimizer, metrics = ["mse", "mae"])
    return model


Python using ctypes with shared libraries that link to non-standard shared libraries

Question: Platform:       Ubuntu 12.04LTS x86_64
Python version: 2.7.3
I have a shared library that was given to me by a vendor, and it included libcrypto.so.0.9.8 and libssl.0.9.8 with a note stating that it would not work with other versions of those libraries.
The version of Ubuntu that we run (12.04LTS) uses libcrypto.so.1.0.0 and libssl.so.1.0.0, and I attempted to compile against those, and confirmed that it doesn't work.
I proceeded to write my C function, and test it compiling against the given libraries, and it works, everything's happy, I get the results back I expect, so forth and so on. Here's where it gets sticky. When I import the function into python, and try to run it, it appears that ld.so is still trying to link it to libcrypto.so.1.0.0, instead of the library specified.
I've copied all of the libraries into /etc/directory (renamed for post) to create a consistent place to put these when it's implemented on other servers.
I'm compiling with:
gcc -fPIC -shared vendor_lib_test.c -o libmylib.so -lvendor_ssl

aditional gcc options I've tried are:
-Wl,-rpath,/etc/directory,-rpath-link,/etc/directory  #together, and each individually
-Wl,-R,/etc/directory/libssl.so.0.9.8,-R,/etc/directory/libcrypto.so.0.9.8 #both with, and without the above

I tried running the code on an older server running 10.04LTS, which uses 0.9.8 of both of those libraries, and it worked as expected, but it's the last 10.04 server we have, and will not be used in production.
checking against ldd produces (edited to remove sensitive info):
linux-vdso.so.1 =>  (0x00007fff39fe9000)
libvendor_ssl.so => /etc/directory/liblpcapi_ssl.so (0x00007f3c7602b000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3c75c64000)
libssl.so.0.9.8 => /etc/directory/libssl.so.0.9.8 (0x00007f3c75b1c000)
libcrypto.so.0.9.8 => /etc/directory/libcrypto.so.0.9.8 (0x00007f3c758ab000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3c76341000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f3c756a7000)

so it appears to be linked to the correct libraries, but running the python script produces a segmentation fault, and gdb gives us:
$ gdb python
(gdb) run ./ptest.py
Starting program: /usr/bin/python ./ptest.py
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff724dc68 in RSA_public_encrypt () from /lib/x86_64-linux-gnu/libcrypto.so.1.0.0

so it's still trying to link against 1.0.0, I'm banging my head against the wall here.
edit: export LD_LIBRARY_PATH=/etc/directory did not work either.
Comment: After loading your library with ctypes, take a look at the output of `os.system('pmap %d' % os.getpid())` to see which versions are loaded. Also check `readelf -d libmylib.so` and `readelf -d libvendor_ssl.so` for the `NEEDED` versions and the `RPATH` or `RUNPATH` values.
Comment: Check the output of `nm libvendor_ssl.so` to see if it uses the versioned symbols, such as `RSA_public_encrypt@@OPENSSL_0.9.8`. It looks like it doesn't. Python's _ssl module does.
Comment: Thank you for your comment. pmap shows 0.9.8 of both libraries loading, followed by 1.0.0 for both of them. readelf shows 0.9.8 for both on the vendor library, with no RPATH. readelf shows RPATH Library path: [/etc/directory] on my library
Comment: It would appear that python loads 1.0.0 all on it's own. If you simply import os, and print os.system('pmap %d' % os.getpid()) it shows libcrypto.1.0.0 loaded. Any ideas on a workaround?
Comment: That looks to be exactly the case. :( I might have to throw up a server with 10.04 on it, just to run this. The alternative is to write the entire thing is C, which would effectively shut out the rest of our developers, but I could build it as a server, with an XML-RPC/SOAP interface I suppose.
Answer: There is an undocumented parameter to gcc that allows you to set a path to a shared library: "-l:/usr/libname.so".
Maybe ld will do what you want if you pass complete lib name to gcc, and you'll be able to run a choosen version of the library, e.g.:
gcc (...) -l:/etc/directory/libssl.0.9.8 -l:/etc/directory/libcrypto.so.0.9.8


How to GET REST resources for Views

Question: Getting a node via Drupal 8's RESTful web service can be done by doing a GET with this url:
<code>/entity/node/1
</code>
How then, do you access a View?   I've tried the following, with no luck:
<code>entity/view/myviewid
</code>
Where 'myviewid' is id specified in views.view.myview.yml
My rest settings for views are exacty the same for nodes, which return JSON successfully.  The view GET attempt however, returns a 500 Internal Server Error.
Answer: If you have the rest module enabled you have a new display type called "REST export". There you can configure to either return just the normal REST output for all entities, or you can even configure which fields you want to include.
Much like you enable REST support for entity types you also don't want to deal with unwanted REST access by default.

How to GET REST resources for Views


Selenium - Java : PhantomJS : Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.remote.HttpVerb

Question: I am trying to instantiate a PhantomJS Driver with Selenium Java. Below is the code :
     File file = new File("C:\\Softwares\\drivers\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe");
     System.setProperty("phantomjs.binary.path", file.getAbsolutePath());
     WebDriver driver = new PhantomJSDriver();
     driver.get("http://www.google.com");

I have tried with different versions of Selenium and I am getting the same exception :
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.remote.HttpVerb
java.lang.NoClassDefFoundError: org/openqa/selenium/remote/HttpVerb
    at org.openqa.selenium.phantomjs.PhantomJSDriver.getCustomCommands(PhantomJSDriver.java:166)
    at org.openqa.selenium.phantomjs.PhantomJSCommandExecutor.<init>(PhantomJSCommandExecutor.java:62)
    at org.openqa.selenium.phantomjs.PhantomJSDriver.<init>(PhantomJSDriver.java:110)

I'm using the below list of dependencies in my project :

phantomjsdriver
selenium-common.jar
selenium-java 2.53.1 . jar

The reason I'm using an outdated version of selenium library is due to some article I found over the internet saying that remote/HttpVerb is deprecated and downgrading the library would remove the error. However, I'm still getting this error
Comment: is ur problem solved??
Answer: Please check this dependancy in POM
<dependency>
      <groupId>org.seleniumhq.selenium</groupId>
      <artifactId>selenium-remote-driver</artifactId>
      <version>2.53.1</version>
    </dependency>

Check whether this class is present or not
Comment: Thanks for the response. Unfortunately, I have added the dependency and still not working.
Comment: is it works for u? I have used 2.48.2 standalone jar it is woking fine
Comment: I checked for the class HttpVerb in the library. It is not present. No, still the issue persists.
Comment: Add it into the dependamcy
Comment: Does this version have the class present in the library?
Comment: I am using 2.48.2 standalone jars it runs. Downgrade the jars and try
Comment: use phantomjsdriver-1.2.1 if use 2.53
Comment: I used a combination of  phantomjs - 1.2.1; selenium-java - 2..53.0; and selenium remote driver. This worked


Divisor on Elliptic Curve

Question: A divisor on an elliptic curve E is a formal sum of points $$D=\sum_{P\in E}n_P(P)$$ where the $n_P$ are integers only a finite number of which are nonzero.
Could anyone please explain what is the difference between $(P)$ and $P$ ? I know $P\in E$  is a point on $E$.  And what is the use of formal sum here ?
Comment: Typically one works with *rational points* on the elliptic curve, which can be given a group operation "+" related to the geometry of the curve, and it is with respect to this operation that one can take integer multiples and finite sums of points.
Comment: For an elliptic curve $E : \{(x,y) \in \overline{k}^2, y^2=x^3+x\} \cup \{\infty\}$ let $f(x,y) \in k(E)=k(x)[y]/(y^2-x^3-x)$ the function field then $Div(f)$ is the list of zeros and poles of $f$ weighted by multiplicity. The point is that $Div(fg) = Div(f)+Div(g)$ and $Div(f) = \emptyset \implies f \in k^*$ and $Div(f)$ always has degree $0$ (same number of zeros/poles). From there the big question is which (degree $0$) divisors come from some function $\in k(E)$. Exercice : factorize $x^3+x$ and deduce $Div(x),Div(y),Div(x-a)$
Answer: A divisor is a gadget that we use to keep track of values attached to points on a curve. The notation $(P)$ is just to indicate what values are attached to what points. For instance, the divisor $D=3(P)+5(Q)$ is meant to indicate that $n_P=3$ and $n_Q=5$. If you are confused about this notation, you could think of a divisor as a vector, such that each coordinate is associated with a point on the curve, i.e., $D=(n_P)_{P\in C}$, but you can easily see that this notation is inefficient because if I write now $(\ldots,0,0,0,3,0,\ldots,0,5,0,0,\ldots)$, it is not clear what point is attached to $3$ and what point is attached to the value $5$, unless I used some notation like $(\ldots,0,0,0,3_P,0,\ldots,0,5_Q,0,0,\ldots)$ of something like that. Moreover, this vector notation has all those unnecessary zeroes, and, of course, it is also misleading because there may be an uncountable number of points on $C$. Thus, we prefer to write $D=3(P)+5(Q)$ to indicate a divisor with $n_P=3$, and $n_Q=5$, and $n_R=0$ for all $R\neq P,Q$.
If you want to think about a concrete divisor, think about the divisor of a function. Let $f(x)= (x-P)^3(x-Q)^5$, for some real numbers $P,Q$, and define $D=\sum_{x\in \mathbb{R}} \operatorname{ord}_x(f)\cdot  (x)$, there $\operatorname{ord}_x(f)$ is the order of vanishing of $f$ at $x$. Then, $D=3(P)+5(Q)$.
Comment: Thanks. Totally save my day!
Comment: Thank you for explaining briefly.
Answer: I don't think there should be a difference between $(P)$ and $P$. Seeing it as a "formal sum" is probably a little bit confusing, since it doesn't really tell you anything. It might be helpful to think of a divisor $D$ as an element of the free abelian group on the points of your elliptic curve. As far as the usage goes, they are basically everywhere. It might help to just go through an algebraic geometry book and see it in action.
Answer: Well, I think the author wants to distinguish formally between the point $P$ on the curve and the symbol $(P)$ (that stands for $P$) in a formal linear combination of points. This distinction is not necessary. It should be clear from the context.

Divisor on Elliptic Curve


Define zone-wrapper in Omega 4 and 960px

Question: I'm using omega 4 and i got problems. How can i define 960px in omega 4 ? should i define it in <code>_grid.scss</code> like this :
<code>$grid: 12px ;
$gutters: 1/3;

$tab:44em;
$desk:77em;
$mobile:15em 35em;
</code>
If it's true , how can i have something like omega 3 zone-wrapper with 100 % width ?!!!
Answer: If you are using Susy, something like that will do the job:
<code>$total-columns: 12
$column-width: 6em;
$gutter-width: $column-width / 3;
$grid-padding: $gutter-width / 2;
$container-style: fluid;

html {
  font-size: 62.5%;
}

.l-page {
  @include container();
}
</code>


python - jogo da cobrinha/projeto faculdade

Question: Preciso criar um programa que simule uma espécie de "jogo da cobrinha" usando apenas variáveis booleanas, funções básicas e repetidores. Até o momento meu programa se encontra assim:
print()
print('=================================================')
print('         Bem-vindo ao Jogo da Cobrinha!          ')
print('=================================================')
print()

nlinhas = int(input('Número de linhas do tabuleiro : '))
ncols   = int(input('Número de colunas do tabuleiro: '))
x0      = int(input('Posição x inicial da cobrinha : '))
y0      = int(input('posição y inicial da cobrinha : '))
t       = int(input('Tamanho da cobrinha           : '))

# Verifica se corpo da cobrinha cabe na linha do tabuleiro,
# considerando a posição inicial escolhida para a cabeça
if x0 - (t - 1) < 0:
    # Não cabe
    print()
    print("A COBRINHA NÃO PODE FICAR NA POSIÇÃO INICIAL INDICADA")

else:

    ''' Inicia a variável d indicando nela que t-1 partes do corpo
        da cobrinha estão inicialmente alinhadas à esquerda da cabeça.
        Exemplos:
           se t = 4, então devemos fazer d = 222
           se t = 7, então devemos fazer d = 222222
    '''
    d = 0
    i = 1
    while i <= t-1:
        d = d * 10 + 2
        i = i + 1

    # Laço que controla a interação com o jogador
    direcao = 1
    while direcao != 5:
        # mostra tabuleiro com a posição atual da cobrinha
        imprime_tabuleiro(nlinhas, ncols, x0, y0, d)

        # lê o número do próximo movimento que será executado no jogo
        print("1 - esquerda | 2 - direita | 3 - cima | 4 - baixo | 5 - sair do jogo")
        direcao = int(input("Digite o número do seu próximo movimento: "))

        if direcao != 5:
            # atualiza a posição atual da cobrinha
            x0, y0, d = move(nlinhas, ncols, x0, y0, d, direcao)

print()
print("Tchau!")

# ======================================================================

def num_digitos(n):
    """ (int) -> int

    Devolve o número de dígitos de um número.

    ENTRADA
    - n: número a ser verificado

    """
    # Escreva sua função a seguir e corrija o valor devolvido no return

    n = int(input('qual é o numero: '))
    num_digitos = 0
    i = 0
    while n != 0:
        i = n % 10
        n = n // 10
        num_digitos = num_digitos + 1
        i = i + 1

    print("Número de digitos é", num_digitos)

    return num_digitos

# ======================================================================
def pos_ocupada(nlinhas, ncols, x, y, x0, y0, d):
    """(int, int, int, int, int, int, int) -> bool

    Devolve True se alguma parte da cobra ocupa a posição (x,y) e
    False no caso contrário.

    ENTRADAS
    - nlinhas, ncols: número de linhas e colunas do tabuleiro
    - x, y: posição a ser testada
    - x0, y0: posição da cabeça da cobra
    - d: sequência de deslocamentos que levam a posição da cauda da cobra
         até a cabeça; o dígito menos significativo é a direção na cabeça

    """

    # Escreva sua função a seguir e corrija o valor devolvido no return
    Achei = False

    while (d != 0):
        resto = d % 10
        d = d // 10

        if resto == 1:
            x0 = x0 + 1

        if resto == 2:
            x0 = x0 - 1

        if resto == 3:
            y0 = y0 - 1

        if resto == 4:
            y0 = y0 + 1

        if x == x0 and y == y0:
            achei = True

    return True

# ======================================================================
def imprime_tabuleiro(nlinhas, ncols, x0, y0, d):
    """(int, int, int, int, int, int)

    Imprime o tabuleiro com a cobra.

    ENTRADAS
    - nlinhas, ncols: número de linhas e colunas do tabuleiro
    - x0, y0: posição da cabeça da cobra
    - d: sequência de deslocamentos que levam a posição da cauda da cobra
         até a cabeça; o dígito menos significativo é a direção na cabeça

    """

     # Escreva sua função a seguir
    print("Vixe! Ainda não fiz a função imprime_tabuleiro()!")

# ======================================================================
def move(nlinhas, ncols, x0, y0, d, direcao):
    """(int, int, int, int, int, int) -> int, int, int

    Move a cobra na direção dada.
    A função devolve os novos valores de x0, y0 e d (nessa ordem).
    Se o movimento é impossível (pois a cobra vai colidir consigo mesma ou
    com a parede), então a função devolve os antigos valores e imprime a
    mensagem apropriada: "COLISÃO COM SI MESMA" ou "COLISÃO COM A PAREDE"

    ENTRADAS
    - nlinhas, ncols: número de linhas e colunas do tabuleiro
    - x0, y0: posição da cabeça da cobra
    - d: sequência de deslocamentos que levam a posição da cauda da cobra
         até a cabeça; o dígito menos significativo é a direção na cabeça
    - direcao: direção na qual a cabeça deve ser movida

    """

    # Escreva sua função a seguir e corrija o valor devolvido no return
    print("Vixe! Ainda não fiz a função move()!")

    return x0, y0, d

# ======================================================================
main()

já consegui fazer as funções num_digitos e pos_ocupada, porém não sei como começar a função que imprime o tabuleiro do jogo  e nem a que move a cobra.
Answer: Criando um jogo da cobrinha no terminal, do zero
Revendo sua pergunta - eu realmente não respondi  que você precisa - é um exercício de faculdade de reconstrução dos passos da cobrinha a partir da direção  - e é s[o teórico, com m 0 preocupação se o jogo seria real ou não.
Mais tarde, talvez,e u ponha uma resposta menor com as dicas que você precisa para o exercício - não quer dizer que você não deva deixar os exercícios que não servem pra nada prático na geladeira um pouco e estudar este:
Tutorial de Jogo da Cobrinha completo em modo texto
Bom - você tem um outro problema aí -
se o jogo precisa ser no modo texto, não há uma forma padronizada, entre sistemas operacionais como Linux e OS X  e o Windows sobre como desenhar uma tela interativa no terminal - ou ler o teclado em tempo real (sem o jogador ter que apertar <enter> após cada movimento).
Ou seja - esse é um jogo que já foi simples num momento passado em que as interfaces de texto ofereciam uma opção fixa de controle. Agora - justamente essas funções de "veja que caractere está na posição tal" e "imprima um caractere na posição tal" é que deixavam criar jogos como esse de forma simples. Eu vou sugerir uma biblioteca para fazer o tal joguinho no modo texto - e ai com alguns exemplos, você vai ver que o jogo é ao mesmo tempo mais simples do que o que você está fazendo, e mais divertido em termos de programação.
Hoje em dia, nos ambientes Linux e OS X, com Python, você pode usar a biblioteca "curses"  que vem com o Python. Já no Windows, por padrão, não funciona "curses" e você terá que usar a biblioteca msvcrt . Você poderia determinar que só vai precisar de 3 coisas: (1) ler uma das teclas-seta em tempo "real" - (isso é, sem esperar o enter), (2) poder limpar  a tela e (3) poder imprimir um caractere numa posição arbitrária (linha e coluna) da tela.  Hmmm, vendo a documentação -- o "msvcrt" nao permite (3) - você está de volta no mato sem cachorro.
Ah - (santo Google) - existe uma forma de instalar o "curses" para Windows - está nesta resposta aceita do stackoverflow em inglês:
https://stackoverflow.com/questions/32417379/what-is-needed-for-curses-in-python-3-4-on-windows7
Isso dito, o Curses é um pouco chato - o seu programa ou imprime e usa input, como você faz, ou faz tudo pelo curses - a documentação dele esta aqui: https://docs.python.org/3/library/curses.html  - por isso nem vou tentar colocar suporte a esse monte de perguntas e respostas pra começar o jogo que você fez. (e convenhamos - é bem legal agora que você já sabe sobre o input e colocar seu valor numa variável - mas quem vai querer ficar respondendo um monte de perguntas só pra começar o joguinho da cobrinha?  :-)  )
Eu estou consultando o tutorial oficial de curses do site do Python em https://docs.python.org/3/howto/curses.html#curses-howto e adaptando para a sua questão.
Vamos por partes - primeiro, uma vamos colocar um caractere no terminal texto que possa ser movido com as teclas seta, usando a biblioteca "curses". Unicode tem um monte de caracteres legais, mas já que é pra ser "raiz", vamos usar um "*".
import curses
import locale
import time
locale.setlocale(locale.LC_ALL, '')

def main(screen):
    curses.curs_set(0)
    screen.nodelay(True)

    y, x = 20, 20
    direction = (0, 1)
    while True:
        key = screen.getch()
        if key == curses.KEY_LEFT:
            x -= 1
        elif key == curses.KEY_RIGHT:
            x += 1
        elif key == curses.KEY_DOWN:
            y += 1
        elif key == curses.KEY_UP:
            y -= 1
        elif key in (0x1b, ord("q")): # <ESC>
            break
        screen.addstr(y, x, b"*")
        screen.refresh()
        time.sleep(0.1)

curses.wrapper(main)

Você percebe que o curses tem uma porção de burocracias - temos que chamar o setlocale para poder imprimir carácteres unicode (num terminal com unicode, claro), temos que chamar o curs_set, nodelay para suprimir o cursor do modo texto e para ele não ficar esperando o <enter>, como um input comum.  Além disso, a chamada wrapper que chama a função main já inicializa a tela, e configura umas 4 ou 5 coisas.
Com essas chamadas fora do caminho, podemos começar a pensar no programa -
eu ponho o "*" inicialmente na posição "20, 20" (pra que ficar perguntando pro usuário isso? - o jogo pode ter algumas posições de início pré-configuradas, ou pode simplesmente sortear uma posição, mas não vai mudar o jogo ficar perguntando a posição inicial da cobrinha para o usuário -  a não ser pra pior).
No corpo desse "while True" eu estabeleço oq eu chamamos de "laço principal" do jogo - é o techo de código que roda todo o frame de jogo - e que vai atualizar a posição dos elementos, ler o teclado, etc -- por mais sofisticado que seja um jogo - pode ser o GTA VIII - , ele vai ter que ter um "laço principal" - em alguns frameworks de programação de jogos, o laço pode ser embutido no framework, e você só configura algumas funções suas que serão chamadas quando acontecerem eventos - mas o laço está lá.
Dentro do laço, a primeira coisa é chamar screen.getch() -  é um método do curses (na verdade no objeto "screen" que o wrapper passa para a nossa função) que lê o código numérico de uma única tecla. COmo setamos o nodelay acima, essa chamada retorna instantaneamente - se nenhuma tecla estiver pressionada, ela vai ter um valor especial.
Em seguida, várias linhas de programação Python pura: 5 ifs  comparando o código pressionado com os das teclas seta - como esses valores, não são padronizados em ASCII ou outro encoding - ao contrário da tecla "q" ou mesmo do "ESC", temos que comparar com constantes pré-definidas no próprio módulo curses.  (Outros frameworks para jogos que permitem leitura de teclado também tem que usar esse recurso para ter o código das setas, teclas de função (F1, F2, ...), "prtscr", etc...)
Mas - então, não tem segredo -se o usuário pressionou "seta pra direita", somamos 1 na coordenada x,e assim por diante.
Em seguida, a chamada à função addstr(linha, coluna, caractere) coloca o caractere na posição definida. Pronto - tudo o que precisávamos! So que não - lendo a doc, vemos que ele só desenha mesmo, quando chamamos o método refresh - e por fim, uma pausa programada de 1/10 de segundo - para que o asterisco não se mova o mais rápido possível. A duração dessa pausa é que você vai controlar depois, de acordo com o nivel de dificuldade, para determinar a velocidade da cobrinha.
Uma última coisa sobre a "burocracia" de se usar curses: tudo o que você manda pra tela, e pega de volta é em "bytes" - em Python 3, trabalhamos direto com "texto" (as strings de Python 3 são o antigo objeto "unicode" do Python 2) - o que significa que o curses não sabe nada de carácteres acentuados, ou emojis - você tem que passar tudo mastigado pra ele - strings normais de Python tem que ser transformadas em Bytes com seu método "encode" - ou, no caso, como estamos só colocando carácteres simples, podemos escrever os bytes direto colocando um b" para abrir a string no código do programa.
ótimo  - teste até aqui - e tenha em mente que quando criaram as primeiras variantes da cobrinha, na década de 70, era esse ambiente de terminal que as pessoas tinham.
Agora, pra começar a transformar isso no jogo da cobrinha: (1) ela não pode ficar parada, tem que ter sempre uma direção. Se você usar um único numero para a direção como no seu código, toda vez que for usar a direção vai ter que usar uma sequência de "if"s pra atualizar qualquer coisa. direcao = 3: a coordenada y deve ser atualizada? Para cima ou para baixo?
Como teremos que estar atualizando sempre as coordenadas x e y, a direção pode ser uma sequência de dois números, já com os valores para atualizar cada variável.
import curses
import locale
import time
locale.setlocale(locale.LC_ALL, '')

def main(screen):
    curses.curs_set(0)
    screen.nodelay(True)
    y, x = 20, 20
    direction = (1, 0)
    while True:
        key = screen.getch()
        if key == curses.KEY_LEFT:
            direction = (-1, 0)
        elif key == curses.KEY_RIGHT:
            direction = (1, 0)
        elif key == curses.KEY_DOWN:
            direction = (0, 1)
        elif key == curses.KEY_UP:
            direction = (0, -1)
        elif key in (0x1b, ord("q")): # <ESC>
            break
        x += direction[0]
        y += direction[1]
        screen.addstr(y, x, b"*")
        screen.refresh()
        time.sleep(0.1)

curses.wrapper(main)

Agora, nem preciso ficar explicando mais coisas - perceba que o jogo da cobrinha começa a aparecer naturalmente - e é só uma questão de programação agora. E, surpresa: você não "redesenha a tela toda" nesse tipo de jogo - simplesmente, acrescenta um caractere na nova posição da cabeça da cobrinha, deixando os que já estavam lá - era assim que o jogo ficava rápido nos computadores antigos onde foram criados. (Um jogo moderno redesenha a cena toda, todos os frames, recalculando por vezes dezenas de milhares de polígonos, texturizando e iluminando tudo -se for um jogo 3D)
O que precisamos para o jogo estar completo: fazer com que a cobrinha se "apague" depois que tiver andado o seu tamanho -  e fazer com que ela detecte uma colisão. Para essa segunda parte, ainda podemos usar uma função do curses para "ver" o caractere numa dada posição - isso existe - e é o que permitia os joguinhos de cobrinha de antigamente serem mais simples do que hoje. Por que o correto hoje seria em vez de "olhar" para a tela, verificar usando as estruturas de dados que temos, se a cobrinha bateu com algo - seja um a parte dela mesma, uma parede, uma "maçã" (que faz ela aumentar de tamanho e o jogo progredir), etc... Principalmente por que se o jogo for no modo gráfico, ou mesmo em 3D, não é possível "reconhecer" o que está numa posição para onde a cobrinha se move. (nesse caso com o curses, poderíamos ver o caractere e usar um "if" para saber se é um "@" representando uma maçã, ou um "#" representando uma parede, por exemplo). Essa resposta já virou um capítulo de livro, mas não precisa ser o livro inteiro - vou manter o caso simples em que "olhamos" a tela com o método screen.instr(linha, coluna):
import curses
import locale
import time
locale.setlocale(locale.LC_ALL, '')
encoding = locale.getpreferredencoding()
def main(screen):
    curses.curs_set(0)
    screen.nodelay(True)
    y, x = 20, 20
    direction = (1, 0)
    while True:
        key = screen.getch()
        if key == curses.KEY_LEFT:
            direction = (-1, 0)
        elif key == curses.KEY_RIGHT:
            direction = (1, 0)
        elif key == curses.KEY_DOWN:
            direction = (0, 1)
        elif key == curses.KEY_UP:
            direction = (0, -1)
        elif key in (0x1b, ord("q")): #
            break
        x += direction[0]
        y += direction[1]
        if screen.instr(y, x, 1) != b" ":
            screen.addstr(10, 15, "Você morreu!".encode(encoding))
            screen.refresh()
            time.sleep(3)
            break
        screen.addstr(y, x, b"*")
        screen.refresh()
        time.sleep(0.1)
curses.wrapper(main)
E por fim, criamos um comprimento inicial desejado para a cobrinha, guardamos todas as coordenadas (x, y) pelas quais ela passou - e ao atingir esse comprimento, apagamos o último "*" naquela posição. Graças as listas de Python, é trivial fazer isso. (mas você pode aprender mais e fazer de forma mais elegante usando o collections.deque). Isso são literalmente mais 6 linhas de código - e o jogo estaria "completo", exceto que sem graça nenhuma. Aproveito para incluir a "maçã" que aumenta o comprimento da cobrinha em 5 traços de cada vez. Não tem segredo também - usamos o módulo "random" para sortear a maçã. COlocamos pontuação e uma verificação dos limites da tela (o curses expõe o tamanho do terminal em curses.COLS e curses.LINES) - acho que só isso:
import curses
import locale
import time
import random
locale.setlocale(locale.LC_ALL, '')
encoding = locale.getpreferredencoding()

def sorteia_maca(screen):
    pos = random.randrange(0, curses.COLS), random.randrange(0, curses.LINES)
    screen.addstr(pos[1], pos[0], b"@")

def main(screen):
    curses.curs_set(0)
    screen.nodelay(True)
    y, x = 20, 20
    direction = (1, 0)
    comprimento = 5
    corpo = []
    sorteia_maca(screen)
    pontuacao = 0
    while True:
        key = screen.getch()
        if key == curses.KEY_LEFT:
            direction = (-1, 0)
        elif key == curses.KEY_RIGHT:
            direction = (1, 0)
        elif key == curses.KEY_DOWN:
            direction = (0, 1)
        elif key == curses.KEY_UP:
            direction = (0, -1)
        elif key in (0x1b, ord("q")): # <ESC>
            break
        x += direction[0]
        y += direction[1]

        corpo.insert(0, (x, y))
        if len(corpo) > comprimento:
            final = corpo.pop()
            screen.addstr(final[1], final[0], b" ")

        cabeca_em = screen.instr(y, x, 1)
        if cabeca_em == b"@":
            pontuacao += 5
            comprimento += 5
            sorteia_maca(screen)

        elif cabeca_em != b" " or x >= curses.COLS or y > curses.LINES or x < 0 or y < 0:
            screen.addstr(10, 15, "Você morreu! Pontos: {}".format(pontuacao).encode(encoding))
            screen.refresh()
            time.sleep(3)
            break

        screen.addstr(y, x, b"*")
        screen.refresh()
        time.sleep(0.1)

curses.wrapper(main)

Pronto - completamente jogável!  Você pode incrementa-lo com várias coisas agora - por exemplo, fazendo a maçã mudar de lugar de tempos em tempos, pode colocar "fases" com "paredes" e aumentando a velocidade, pode mudar para uma tela gráfica usando "pygame" ou outro framework, em vez de mante-lo em modo texto, pode escrever uma classe em orientação a objetos pra cobrinha - permitindo que você tenha mais instâncias dela na mesma tela, as demais sendo controladas pelo computador (ou - ligar o jogo em rede, e ter uma cobrinha controlada por outro jogador)
Answer: Respondendo dúvidas específicas da implementação na pergunta, sobre o jogo da cobrinha
Ok - vou deixar a outra resposta como referência para quem quiser implementar o Jogo da Cobrinha em Python. Aqui, vou comentar sobre o seu problema -que é algo usando "input" que parece com o jogo da cobrinha.
Movendo a cobra
No exercício proposto, a cobrinha é dada simplesmente por um número inteiro, com tantos dígitos quanto forem o comprimento real da cobra.
Ao obter o dado de uma nova direção, simplesmente multiplique o numero anterior por 10 (acrescentando assim um "0" ao final) e some o número de um dígito representando a direção atual.  Ex.: se a cobrinha atual é representada pela sequÊncia 2232 e se move de novo na direção 3, o número se tornará 22323.  Para limitar o tamanho da cobrinha, você pode pegar o resto da divisão 10 ** N (sendo N o tamanho da cobrinha) por esse número. Nesse exemplo, se a cobrinha tem que ficar com tamanho "4", o resto da divisão de 22323 por 10000 (10 ** 4) é 2323 - o número mais a direita foi descartado. - você não precisa de uma função só pra essa inserção: são duas linhas de código - mas pode faze-lo se quiser.
(Por outro lado, a parte principal do seu programa está no corpo do módulo, fora de qualquer função: isso não só é uma bagunça considerável, como nem sequer vai funcionar - já que as linhas no corpo do módulo são executadas antes das linhas que definem as funções em si, mais abaixo no programa. Essa parte principal do programa deve ser colocada numa função - mesmo que seja chamada uma única vez - e na última linha do programa você chama essa função)
(dica 2: no mundo real, Python tem "listas" para guardar esse tipo de dados guardado como um inteiro - e linguagens que não são Python e não tem listas, como C, também não tem inteiros de tamanho arbitrário que possam ser usados pra esse fim, então essa é uma restrinção bem artificial do exercício)
Imprimindo o tabuleiro
Esse aí talvez seja o coração do problema. A questão é que sem uma biblioteca de terminal que permita que você iprima um caratcére em qualquer posição que quiser, você só pode imprimir a tela "de cima pra baixo": isso é - primeiro a linha do topo, depois a linha abaixo dessa, e assim por diante até a última linha. Então, se você deixar pra "descobrir" durante  a impressão que a cobrinha "desceu", e quiser imprimir uma parte do corpo dela uma linha pra cima, não tem como.
São dois caminhos possíveis:

Criar uma matriz 2D em memória antes de imprimir, com cada posição representando uma posição na tela  - aí vocẽ acompanha as direções da cobrinha, "Desenhando-a" nessa matriz - a vantagem é que você pode desenhar em qualquer ponto.  E no passo seguinte, você imprime essa matriz, começando das linhas de cima - como a cobra inteira está desenhada, não haverão problemas .
Você pode ao imprimir cada caractere de cada linha, da esquerda pra direita e de cima pra baixo, chamar uma função como a que você quer que seja a sua pos_ocupada: se ela retornar verdadeiro para aquela posição, você imprimei ali um "*" para representar o corpo da cobra, senão imprime um " ".  Essa é a opção mais fácil de programar - SE - a função "pos_ocupada"  já funcionar - mas não parece ser o caso (vamos ver o código dela agora). Por outro lado também é uma solução que se exige que o todas as posições da cobra sejam calculadas múltiplas vezes em cada quadro do jogo.  Esse jogo é assíncrona, e 10 ou 20 posições da cobrinha sao algo insignificante comparadas com as velocidade de um PC onde você roda Python - mas é algo ineficiente por natureza - para cada caractere da tela, vamos dizer que sejam 40 colunas por 20 linhas, você vai calcular a cobrinha inteira.  Numa entrevista de emprego, significa que você é rejeitado no ato. Num trabalho real, significa um trecho do jogo que fica centenas a milhares de vezes mais lento (e consumindo mais bateria) do que da outra forma.  Não é bom encorajar um pensamento do tipo.

O - fui ver o código da sua função "pos_ocupada" - ela está boa - só que, sem nem olhar com muita atenção, dá pra dizer que você nunca rodou a função -e não sabe mesmo se ela funciona.  POr que tem dois erros: a variável "achei" está grafada uma hora como Achei outra como achei - e você nunca usa o resultado dessa variável, simplesmente retorna "True" sempre. E na verdade, você nem precisa dessa variável - se em qualquer momento a condição x == x0 and y == y0, a cobrinha ocupa a posição "x, y", e você pode retornar True. Se chegar ao final do while, pode retornas False. Então é só mudar o final dessa função para:
   if x == x0 and y == y0:
        return True

return False

(Aproveite e leia sobe os "enhance assignment operators" e veja como você deveria estar escrevendo x0 += 1 em vez de x0 == x0 + 1). Quanto aos if na sua função - você não fala no seu enunciado, e como não chega a imprimri nada não dá para saber - mas em computação, via de regra, a ordenada "y" começa em 0 "em cima" e aumenta para baixo - princialete n oo modo texto, falamos de "linha 1, linha 2, linha 3", uma embaixo da outra. Como esse sistema louco que seu professor inventou vai achando as posições anteriores do corpo da cobrinha analizando a direção "de onde ela veio" (isso é, quando a cobrinha vai pra esquerda: direção "1", significa que a parte depois da cabeça está a "direita" da cabeça.  A função "pos_ocupada" então avança pra "direita" ao encontrar o código de direção pra "esquerda" que o usuário tiver entrado). Ok - não sei se essa parte do código é sua ou do foi passada como dica pelo professor - mas tenha certeza de entender essa parte anterior, entre parênteses, antes de continuar.
De qualquer forma, para um sistema de coordenadas em que o y cresça para baixo, os "if" relativos ao  "y0" estão invertidos. Se a cobra veio para baixo (direção 4) a parte anterior do corpo dela está na linha de cima, então é preciso subtrair 1 de y0 - o código está somando em vez de subtrair.
Bom, com o "pos_ocupada" arrumado, fica bem simples usar o método (1) acima: um for y percorrendo todas as linhas, dentro dele um for x percorrento todas as colunas - e aí, você imprime um caractere "*" ou " " dependendo de posocupada(...,x ,y) retornar verdadeiro ou falso. (EM Python3, a função print permite imprimir um único caractere, sem mudar de linha se você passar o parâmetro com nome end com o valor de uma string vazia: print(caractere, end="") (e ao final do "for x", antes de iniciar uma nova interalçao do  "for y", use um print vazio para mudar de linha.
(ufa - escrever esse parágrafo foi muito mais cansativo do que escrever o código direto, mas tenho que deixar algo pra você fazer).
Possivelmente esse método (1) é o que o seu professor tinha em mente ao propor o exercício.  PRINCIPALMENTE se ele deu a dica de escrever essa função "pos_ocupada".  Mas, se fosse um exercício meu, eu não daria nota máxima, e se em vez de prova, fosse uma entrevista de emprego....
Para o método (2): A primeira coisa é criar uma matriz bidimensional - chega a ser engraçado, mas Python não tem algo desse tipo pronto. COm as funcionalidades de "operator overloading" seria realmente bem fácil criar um objeto especializado que acita um par de elementos como índice, que poderia funcionar como coordenadas.  Mas não é o seu exercício. Um outro jeito, é usar um dicionário - Python permit que uma tupla "x,y" seja uma chave de dicionário - então se uma função com o código muito parecido com  "pos_ocupada" criar um elemento num dicionário vazio em todas as posições "x0"  e "y0" que estão ocupadas, você pode ler esse dicionário no momento da impressão -  e o corpo da cobra vai ser calculado uma única vez. Nesse caso, o dicionário estaria funcionando como uma "matriz esparsa" - é bom código - simples, eficiente - mas você tem que aprender em algum momento a criar uma matriz 2D em Python, que é fazendo uma "lista de listas" e fazer uso dela, e  juntar seus elementos para criar a impressão com um único print. (VOltando à prova e entrevista de emprego: eu seria mais impressionado, NESSE caso pelo código usando dicionário - mas não se a pessoa tivesse usado uma receita pronta e não soubesse manipular uma lista de listas como uma matriz 2D.
Código para criar a matriz:
tela = []
for y in range(linhas):
   tela.append([" "] * colunas)

Pronto, agora você pode usr posições do tipo
tela[y0][x0] para guardar um valor numa única posição do seu jogo -
seja um "*" para o corpo da cobrinha, ou outros caractéres se o jogo
viesse a ter "maçãs" ou "paredes".
Voce pode criar uma tela em branco no começo da função "pos_ocupada" (ou uma função com o mesmo algoritmo, mas outro nome), marcar cada posição da cobrinha, fazendo, dentro do while  tela[x0][y0] = "*"e devolver a tela "preenchida".
PAra imprimir essa estrutura, usamos o método join das strings. join acita uma sequência como parâmetro, e cria uma ´unica string em que os elementos da sequência são colados juntos, separados pela string original do join (que é um método) - se a string for um caractere de quebra de linha ("\n"), o resultado é uma string que pode ser impressa, e imprimirá cada elemento da lista "joinada" em uma linha diferente. Se for uma string vazia, todas as strings da lista são simplesmente coladas em sequência.
Então, é possível fazer print ('\n'.join(''.join(linha) for linha in tela)) para imprimir essa "tela" toda de uma vez.
(Pronto, agora você tem como prosseguir com o exercício)
Comment: Sério ? A plataforma _Recomenda_ 1 resposta por pergunta. Mas são duas coisas completametne diferentes, eo texto ficaria muito grande.

Se algéum for buscar "jogo da cobrinha em Python" - a resposta acima é a boa. Pra respodner a pergutna do OP, essa é melhor - não vej por que não manter separado - se fosse proibido ter duas respostas do mesmo autor, a plataforma simplesmente não permitiria.
Comment: Faça um *edit* na resposta acima, **Problema e Explicação**, e anexe essa resposta.
Comment: (Só para esclarecer, o "Serio?" que começa o comentário acima não era pra ser de afronta - era pra perguntar se o @Edilson realmente queria que eu fizesse isso.  Só que na hora de ler ficou parecendo uma afronta mal educada - desculpem. Revisitando as respostas agora, parece que faz realmente sentido manter as duas respostas)


How do you configure the users in Zabbix without using the frontent?

Question: I'm completely new to Zabbix.
How do I configure the users for Zabbix at startup?
Is there a configuration file somewhere.
Could someone point me to the relevant documentation? I only find 'frontend' documentation.
I only found something in the API at:
https://www.zabbix.com/documentation/6.4/en/manual/api/reference/user
But surely there's a configuration file somewhere?
Answer: The users of the frontend are defined in the underlying database.
You can manage them from the GUI or you can provision them via API calls, using the API reference you've found.
You also have to consider the authentication mode if you want to provision SAML or LDAP users.


How to get a particular time in a java.util.Date in Java 8

Question: For eg - I want 21:30 as the java.util.Date
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY,21);
cal.set(Calendar.MINUTE,30);
cal.set(Calendar.SECOND,0);
cal.set(Calendar.MILLISECOND,0);

Date d = cal.getTime();

Is there a better way to do it in Java 8 ?
I want it in java.util.Date only as I want to pass a Date in endAt() method in Quartz api while building a Trigger.
Comment: ... but why ... `Date` is the dark side. Come to the light and use [`java.time`](https://www.baeldung.com/java-8-date-time-intro).
Comment: 21:30 is not a date, it is time. `java.util.Date` does  not let you manage time but date+time. As @akuzminykh said, DON'T use `java.util.Date`, it is broken.
Comment: @akuzminykh - I want to pass a Date in endAt() method in Quartz api while building a Trigger.
Comment: @RohitT There are many ways to have backwards compatibility to `Date` from `java.time`. There are even methods and functions just for that. You don't need to use any of the old API beside the backwards compatibility stuff.
Answer: Conversion of the new java.time classes to java.util.Date usually go through the Instant class. For example, to convert LocalTime 21:30 using today's date and the system time zone you can use:
LocalTime nineThirty = LocalTime.of(21, 30);

Date d = Date.from(Instant.from(nineThirty.atDate(LocalDate.now())
                                          .atZone(ZoneId.systemDefault())))

For Quartz specifically, you may want to use the DateBuilder class from Quartz instead of the legacy Calendar class.
Date d = DateBuilder.todayAt(21, 30, 0);

Comment: Thank you so much @Joni....Just what i needed...really appreciate it a lot.


Fatal error: Class 'Dwoo' not found inapplication/libraries/MY_Parser.php on line 57

Question: Ok, I am having a class not found problem with Codeigniter (latest edition) and Dwoo while working with Phil Sturgeon's templating system.  I have followed PHil's instructions found here. But when I run my application, I keep getting a Class 'Dwoo' not found in Phil's MY_Parser library on line 57. Did I miss something common in the installation?  I can get his template system to work just fine without the Dwoo addition.
Is there anything that I am gaining by using Dwoo with Phil's templating system, besides the shortened template tag within views and templates??
Tony
Answer: This is really too late to reply but this might help others stuck at the same problem as I was :P
I know you might have fixed this, anyway you were missing:
<code>include(APPPATH.'libraries/dwoo/dwooAutoload.php');
</code>
And the benefits of using Dwoo with Phil's templating system depends on your requirements.


Orbits of solution lie in level sets

Question: Let $F:X\rightarrow\mathbb{R}$ be a continuously differentiable function on an open set $X\subset\mathbb{R}^2$. I want to find an autonomous differential equation $y'=f(y)$ on $X$ such that the orbits of its solution lie in the level sets of $F$.
My idea was that this would mean that $(F'\circ y)\cdot y'=(F\circ y)'=0$, but this doesn't really look autonomous to me. What would be the right approach?
Answer: Hint: since solutions of your system $y' = f(y)$ lie in the level sets of $F(y)$, it's very easy to show that $\nabla F \cdot f(y) \equiv 0$ in the whole $X$. Using that $F(y)$ and its $\nabla F =\left (\frac{\partial F}{\partial x}, \frac{\partial F}{\partial y} \right)$ are known, can you come up with any vector field that is everywhere orthogonal to $\nabla F$?

 For example, $f(y) = \left ( \frac{\partial F}{\partial y}, -  \frac{\partial F}{\partial x}\right)$.

Orbits of solution lie in level sets


multiplas Thread cliente, servidor usando socket

Question: Ola estou fazendo um trabalho para faculdade e estou com duvida como adicionar uma nova thread para adicionar outro cliente...
basicamente o que eu quero fazer é após iniciado o servidor ser possivel enviar mensagem de mais de um cliente, e destinguindos
o sistema é uma prova de conceito de um sistema de leiloes
segue o que foi desenvolvido ate o momento

import java.net.*;
import java.io.*;
import java.util.Scanner;

public class CliThread extends Thread {

    static DataOutputStream outStream = null;
    DataInputStream inStream = null;

    static String host = "";
    static int port = 9090;
    Socket socket = null;
    String MRcv= "";
    static String MSnd = "";

    CliThread(){
        try {
            socket = new Socket("localhost", port);//conecta com o servidor.
            System.out.println("Conectado ao servidor...");
            this.start();//comeca uma nova thread. O metodo run é executado.
            outStream = new DataOutputStream(socket.getOutputStream());
            inStream = new DataInputStream(socket.getInputStream());
            Scanner sc = new Scanner(System.in);

            while(true){
                System.out.println("Digite o seu lance para o produto: ");
                String MSnd = sc.nextLine();//le mensagem do console.
                outStream.writeUTF(MSnd);//manda mensagem para o servidor.
                outStream.flush();
            }
        } catch(Exception e) {System.out.println(e);}
    }

    public void run(){
        while (true) {
            try {
                MRcv = inStream.readUTF();//le mensagem do servidor.
                System.out.println("Servidor: " + MRcv);
            } catch(Exception e) {}
        }
    }

    public static void main(String args[]){
        new CliThread();

    }
}

servidor
    import java.net.*;
import java.io.*;
import java.util.Scanner;

class SrvThread extends Thread {

    static int port = 9090;

    static DataOutputStream outStrem = null;

    static String MSnd= ""; //used in client

    Socket socket = null;
    ServerSocket serverSocket = null;

    DataInputStream inStrem = null;

    String MRcv= "";

    SrvThread(){ //init
        try {
            serverSocket = new ServerSocket(port);
            System.out.println("Aguardando conexão com o cliente...");
            socket = serverSocket.accept();//aguarda conexao com o cliente.
            System.out.println("Conexão Estabelecida.");
            outStrem = new DataOutputStream(socket.getOutputStream());
            inStrem = new DataInputStream(socket.getInputStream());

            this.start();//inicia uma nova thread. O metodo run é executado.

            Scanner sc = new Scanner(System.in);
            while(true){
                System.out.println("Server Send: ");
                String MSnd = sc.nextLine(); //le string do console
                outStrem.writeUTF(MSnd);//envia string para o cliente.
                outStrem.flush();
            }
        } catch(Exception e){
            System.out.println(e);
        }
    }

    public void run(){
        try {
            while(true){
                MRcv = inStrem.readUTF();//le as strings do cliente
                System.out.println("Comprador1: "+MRcv);
            }
        } catch(Exception e) {
            System.out.println(e);
        }
    }

    public static void main(String args[]){
        new SrvThread();
    }
}

Answer: Instancie mais de uma no método main
public static void main(String args[]){
    new CliThread(); // cliente 1
    new CliThread(); // cliente 2
}


Check file on csv file streaming with scala

Question: Im working with spark streaming and don't want to process the old files when the new streaming file come every 10 minutes:
<code>val val1= spark
.read //
.option("header", "true")
.option("schema", "true")
.option("sep", ",")
.csv(path_to_file).toDF().cache()
val1.registerTempTable("test")
</code>
after creating the dataframe i do some transformation and process
the checkpoint can help me and how i used in my case
Comment: thats ok i doit
Answer: *****************the solution*******************
val spark = SparkSession
    .builder
    .appName("test")
    .config("spark.local", "local[*]")
    .getOrCreate()
spark.sparkContext.setCheckpointDir(path_checkpoint)
and after i call the checkpoint function on the dataframe
And i specified a trigger to execute the job
<code>   .writeStream
    .format("csv")
    .option("codec", "org.apache.hadoop.io.compress.GzipCodec")
    .option("checkpointLocation",CheckPoint)
 .trigger(Trigger.ProcessingTime("180 seconds"))
    .option("Path",Path )
    .option("header", true)
    .outputMode("Append")
    .queryName("test")
    .start()
</code>


Perl command line - assume while loop around

Question: Can anyone explain the difference in output of the two perl (using cygwin) commands below:
$ echo abc | perl -n -e 'if ($_ =~ /a/) {print 1;}'

prints :
1
$ echo abc | perl -e 'if ($_ =~ /a/) {print 1;}'

The first prints '1' while second one outputs blank?
Thanks
Answer: -n switch adds while loop around your code, so in your case $_ is populated from standard input. In second example there is no while loop thus $_ is leaved undefined.
Using Deparse you can ask perl to show how your code is parsed,
perl -MO=Deparse -n -e 'if ($_ =~ /a/) {print 1;}'

LINE: while (defined($_ = <ARGV>)) {
    if ($_ =~ /a/) {
        print 1;
    }
}

perl -MO=Deparse -e 'if ($_ =~ /a/) {print 1;}'

if ($_ =~ /a/) {
    print 1;
}

Comment: @Rajeev [`O`](http://perldoc.perl.org/O.html) is the module name, and `Deparse` is the function that is requested to be imported.  An alternative option would be `-MList::Util=sum`, which would important the `sum` function of [`List::Util`](http://perldoc.perl.org/List/Util.html)
Comment: Thanks, that explains. Now I have question regarding use of perl command line option -MO=Deparse you have used. According to Perl --help this option means -[mM][-]module    execute "use/no module..." before executing program. My question is, how do you know about the O and = characters in this option (-MO=Deparse). Is it documented?
Comment: @Rajeev yes, -M does that.


How to determine if an email is successfully delivered instantly

Question: An app is designed to be installed on a user's computer, hence, an email function from the app would very much depends on the user's ISP service.  Port 25 may be open or may be blocked.
When I use standard code for mail ua including port 25, it seems to deliver the email, however, for  some user whose ISP blocks port 25 email does not go through.  I'd like to have a reliable way to determine if port 25 fails to deliver email Instantly and then try to use another port to send email.  In other words, I'd like to leverage two ports, if port X fails then automatically switch to port Y.  Doable?
Btw, the web server side scripting language I'm using is Adobe ColdFusion's sibling, Railo, and the specific tag is CFMAIL.  As mentioned above, wrapping CFTRY around CFMAIL does not help for this purpose.
Thanks.
Answer: There are multiple factors in determining if your message gets delivered.
1)  When you send your message with CFMAIL, you can either specify a mail server in the cfmail tag, or use the server default.  When the tag is executed, coldfusion/railo will try to access that server.  If the server is unavailable or blocked, your message will go to the coldfusion/railo undeliverable folder.  The only way to check that is to write a script to monitor the undeliverable folder and its content.
2) IF coldfusion/railo successfully connect to the SMTP server and attempts to hand off the email, your notifications would come from the SMTP server rather than coldfusion/railo.  The message would be sent from the SMTP server to the failto="" path, or the from="" if not specified.  That email would be notified for "mailbox does not exist", "relay not allowed", "user over their mailbox limit", etc....
If you need to monitor those bounces, you could create a separate email account for the failto="" and use CFPOP to monitor the email account for bounces.
Also, if you use a company like sendgrid for your outgoing SMTP server, they will provide an API to monitor bounces, opt outs, spam complaints, etc...


Date function not working after updrading to mysql 5.7

Question: I am trying to query a table and select the rows on the current days. I am using the CURDATE() function but it doesn't seem to be working. Previously on mysql 5.1 it worked perfectly fine. But now it doesn't work.
Below is my query statement. Any help would be really appreciated. When I run this on PHP admin it brings 0 results.
When I remove the "AND DATE(checkout_date - INTERVAL 1 HOUR ) = CURDATE( )" it works fine. Thanks
SELECT * FROM `checkout` WHERE

  is_confirmed = 0
  AND sent_to_reminder = 1
  AND DATE(checkout_date - INTERVAL 1 HOUR ) = CURDATE( )

Answer: You have a  ) in the wrong place. Try
DATE(checkout_date) - INTERVAL 1 HOUR = CURDATE( )

Answer: - INTERVAL 1 HOUR needs to go outside of your function call:
SELECT * FROM `checkout`
WHERE is_confirmed = 0
AND sent_to_reminder = 1
AND DATE(checkout_date) - INTERVAL 1 HOUR = CURDATE()


How do I have this line of code print out the greeting, excluding some characters

Question: #This is my string known as "greeting".

greeting = "hello how are you, what?"

#This prints the greeting the normal way.

print(greeting.title())

#This prints the greeting backwards and excluding the chosen letter "h" on the outside.

print (greeting.title()[:greeting.find("h"):-1] + greeting[greeting.rfind("h")-1:5])

How do I make this print out the greeting, excluding the outside letter "h", but leaving the inside letter "h" where it is.
I need the output to be:
"Hello How Are You, What?"

"W ,uoY erA woH olle"

With my current code output is:
"Hello How Are You, What?"

"?tahW ,uoY erA woH olle"

I just need the '?tah" to be gone.
Answer: greeting = "hello how are you, what?"
title = greeting.title()
print(title)
print(title[greeting.rfind('h') - 1:greeting.find('h'):-1])

This outputs:
Hello How Are You, What?
W ,uoY erA woH olle

Demo: https://replit.com/@blhsing/UnknownMustyFlatassembler
Answer: Regular expressions would be another way to achieve this.
>>> import re
>>> greeting = "hello how are you, what?"
>>> re.sub(r'^[hH](.*)[hH].*?$', r'\1', greeting.title())[::-1]
'W ,uoY erA woH olle'

We're going to match everything between either h or H and the last h or H in the string and replace the whole string with just that, then reverse it with [::-1].


Como formatar um array para saída JSON?

Question: Tenho o seguinte array:

const products = ["camisa-PP", "camisa-M", "camisa-G", "camisa-GG", "camisa-GG", "camiseta-PP", "camiseta-G", "cueca-M", "blusa-XG", "blusa-XG", "blusa-XG", "blusa-P"];

console.log(products)

E preciso convertê-lo para que a saída em JSON ocorra assim:
{
  "camisa": {
    "PP": 1,
    "M": 1,
    "G": 1,
    "GG": 2
  },
  "camiseta": {
    "PP": 1,
    "G": 1
  },
  "cueca": {
    "M": 1
  },
  "blusa": {
    "XG": 3,
    "P": 1
  }
}

Preciso que cada elemento agrupe os tamanhos de cada produto e a quantidade. Como fazer isso?
Até agora consegui apenas separar os valores do array que continha - e o transformei em um objeto, mas não tenho ideia de como prosseguir, segue o código abaixo:

const products = ["camisa-PP", "camisa-M", "camisa-G", "camisa-GG", "camisa-GG", "camiseta-PP", "camiseta-G", "cueca-M", "blusa-XG", "blusa-XG", "blusa-XG", "blusa-P"];

let json = products.map(elements => JSON.parse(`{"${elements.split('-').join('":"')}"}`));

console.log(json);
Answer: Há de se mencionar, antes de tudo, que não há necessidade de utilizar JSON.parse aí (montando a string do JSON de forma literal), já que esse é um meio menos performático e mais suscetível a eventuais erros. Ao invés disso, você pode utilizar a própria linguagem para manipular as estruturas de dados diretamente, sem a necessidade de criar strings em JSON.
Tendo isso em vista, há de se entender que o resultado esperado é um objeto e a entrada, um array. Desse modo, você precisa pensar em um jeito de, a partir de um objeto vazio inicial, incrementar os valores conforme se percorre o array. Um exemplo de implementação seria esta:

function groupProducts(arr) {
  // Nosso objeto (vazio) inicial:
  const result = {};

  for (const item of arr) {
    // Cada `item` é algo como "camisa-PP".
    // Portanto, podemos utilizar o método `split` para separá-lo em nome e tamanho:
    const [name, size] = item.split('-');

    // No caso do `name` da iteração atual ainda não ter sido criado:
    if (!result[name]) {
      result[name] = {};
    }

    result[name][size] = (result[name][size] || 0) + 1;
  }

  return result;
}

console.log(
  groupProducts([
    "camisa-PP", "camisa-M", "camisa-G",
    "camisa-GG", "camisa-GG", "camiseta-PP",
    "camiseta-G", "cueca-M", "blusa-XG",
    "blusa-XG", "blusa-XG", "blusa-P"
  ])
);

Basicamente, cada elemento do array original é sempre uma string como "camisa-PP". Separando-a pelo hífen (-), obtemos o nome do produto e o respectivo tamanho. Isso é feito em cada iteração do laço de repetição.
Em posse dessas informações, criamos um objeto para cada produto e um sub objeto para cada tamanho. Utilizamos o operador ||, ali fazendo avaliação de curto-circuito, para criar o valor inicial padrão zero, no caso do tamanho ainda não tiver sido contabilizado.
Se você não entendeu nada do código acima, dê um passo para trás e entenda como trabalhar com objetos em JavaScript. Enfatize seus estudos desde o básico antes de tentar fazer algo assim, que exige um certo domínio da linguagem e seus mecanismos.

Também tem outra formas de fazer isso. Utilizar o Array.prototype.reduce, por exemplo, é uma outra ideia, mas no fundo a lógica sempre será a mesma.
Comment: Muito obrigado Luiz, de fato sou novo na linguagem, eu até tinha uma ideia de como resolver mas não sabia como utilizar as ferramentas da linguagem. Consegui comprender perfeitamente o código, muito obrigado inclusive pela explicação.

Como formatar um array para saída JSON?