Erro ao carregar Widget Dialog() jQuery em ASP.NET MVC

Question: Eu instalei o jQueryUI, alterei o meu BundleConfig, mas mesmo assim o browser não reconhece o Widget Dialog() do meu script jquery.dialogo.js. Verifiquei se a biblioteca está sendo carregada e está tudo normal.

BundleConfig
public class BundleConfig
{
    // For more information on Bundling, visit http://go.microsoft.com/fwlink/?LinkId=254725
    public static void RegisterBundles(BundleCollection bundles)
    {
        bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                    "~/Scripts/jquery-{version}.js"));

        bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
                    "~/Scripts/jquery-ui-{version}.js",
                    "~/Scripts/jquery-2.1.4.js",
                    "~/Scripts/jquery.dialogo.js"));

        bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                    "~/Scripts/jquery.unobtrusive*",
                    "~/Scripts/jquery.validate*"));

        // Use the development version of Modernizr to develop with and learn from. Then, when you're
        // ready for production, use the build tool at http://modernizr.com to pick only the tests you need.
        bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
                    "~/Scripts/modernizr-*"));

        bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site.css"));

        bundles.Add(new StyleBundle("~/Content/themes/base/css").Include(
                    "~/Content/themes/base/jquery.ui.core.css",
                    "~/Content/themes/base/jquery.ui.resizable.css",
                    "~/Content/themes/base/jquery.ui.selectable.css",
                    "~/Content/themes/base/jquery.ui.accordion.css",
                    "~/Content/themes/base/jquery.ui.autocomplete.css",
                    "~/Content/themes/base/jquery.ui.button.css",
                    "~/Content/themes/base/jquery.ui.dialog.css",
                    "~/Content/themes/base/jquery.ui.slider.css",
                    "~/Content/themes/base/jquery.ui.tabs.css",
                    "~/Content/themes/base/jquery.ui.datepicker.css",
                    "~/Content/themes/base/jquery.ui.progressbar.css",
                    "~/Content/themes/base/jquery.ui.theme.css"));
    }
}

Script
 $(document).ready(function(){
        $("#excluir").click(function () {
            $("#dialogo").dialog();
        })
    })

_Layout.cshtml
<!DOCTYPE html>

    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>

    @Styles.Render("~/Content/css")
    @Scripts.Render("~/bundles/jqueryui")
    @Scripts.Render("~/bundles/modernizr")

    @RenderBody()

    @Scripts.Render("~/bundles/jquery")
    @RenderSection("scripts", required: false)

Erro
Answer: Além do que o @Randrade citou, pode acontecer o seguinte;
O bundle normalmente segue uma sequencia alfabética, o que pode acontecer de alguns scripts necessários estarem sendo carregados posteriormente.
O que você pode fazer é:
Dentro de seu arquivo BundleConfig.cs criar uma nova BundleOrder
class MinhaNovaBundleOrder: IBundleOrderer {
      public IEnumerable<BundleFile> OrderFiles(BundleContext context, IEnumerable<BundleFile> files)
      {
        return files;
      }
}

E usa-la da seguinte forma:
meusScripts  = new MinhaNovaBundleOrder();
meusScripts.Add(new ScriptBundle("~/bundles/all").Include(
                    "~/Scripts/jquery-{version}.js"
                    "~/Scripts/jquery-ui-{version}.js",
                    "~/Scripts/jquery-2.1.4.js",//não há necessidade disso
                    "~/Scripts/jquery.dialogo.js"));

Criando dessa forma, você terá um único bundle para todos os seus arquivos .js, seguindo a ordem que você colocou em seu bundle.
Comment: Rod obrigada pela sugestão.
Comment: @KellySoares teste ambas resposta, caso ainda não resolva, informe.
Answer: Vamos por partes.
Aqui você já possui um Bundle para o jQuery.
 bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                    "~/Scripts/jquery-{version}.js"));

Sendo assim, você não precisa referenciar o mesmo no Bundle para o jQuery-UI. Me refiro à isto:
bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
                    "~/Scripts/jquery-ui-{version}.js",
                    "~/Scripts/jquery-2.1.4.js",//não há necessidade disso
                    "~/Scripts/jquery.dialogo.js"));

Altere para isso:
bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
                    "~/Scripts/jquery-ui-{version}.js",
                    "~/Scripts/jquery.dialogo.js"));

E em sua view principal, _Layout.cstml você está referenciando os arquivos, porém na ordem "errada". Você precisa referenciar primeiro o jQuery e após referenciar o script do jQuery-UI, ficando assim o seu _Layout.cshtml:
<!DOCTYPE html>

    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>

    @Styles.Render("~/Content/css")
    @Scripts.Render("~/bundles/modernizr")

    @RenderBody()

    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/jqueryui")
    @RenderSection("scripts", required: false)

Comment: Randrade, fiz as alterações como sugeriu e também na minha viu eu acrescentei @section Scripts {
    @Scripts.Render("~/bundles/jqueryui")
} e agora está funcionando, mas quando tiro esse render e deixo apenas no Layout ele não funciona, eu poderia colocar os Rendes do Layout depois do Styles para não ter que referenciar novamente esses scrips em cada View? Um dos objetivos em usar o Layout é evitar repetir essa referência de scripts em cada View.
Comment: Teoricamente era para funcionar nas outras `views`. Você pode verificar a ordem que está sendo passado, ou se aparece algum erro no **console**. Mas, não faz sentido carregar um `script` se você não for usar, não concorda?
Comment: Onde não precisa ele não acusa erro, só onde eu uso algum tema, mas vou evitar de mexer nele e deixa como está. Tenho que tentar colocar para rodar o widget na exclusão de registro. Obrigada mais uma vez Randrade!


Node Update not showing to anonymous user even after clear cache

Question: I have a live site , when i update any node, it is not reflected for anonymous user.Even I clear the cache.This domain has SSL certification but we use it only for few pages.But if we use https for the updated content for anonymous user, It show the updated content.
  We have used cache for bloack and anonymous user and minimum cache lifetime and cache expiration is 1 hour.
Answer: You have set the value of Expiration of cached pages to 1 hour
Expiration of cached pages tells the External Caches for how long they can server the old version of a page.
In your case browser is the External Cache and it assumes that it can show old content for an hour. So it doesn't even make a call to you website when you request the page.
You can see the changes after an hour or clear all your browser caches to see the new changes.
More Explanation


Mounting a USB Mass Storage Device in Debian

Question: How do I mount a USB Mass Storage Device in Debian?
The USB Stick is working on other computers.
I have used dmesg which returned useful information about the USB Stick. It is attached to /dev/sdc.
I tried to mount it using mount -t with different filesystem type parameters (ntfs, vfat, fat16, usbfs and usbdevfs).
Only one of these parameters seemed to actually result in something. It was usbfs. However, ls did not show the files which I stored on the USB Stick. Instead, it showed:
001  devices

I presume usbfs is not the right filesystem type. If it is not, then what is?
I am unable to use the Internet on the server for downloading specific packages for instance, since I am trying to install my network card driver on my server via USB.
Comment: "Without using the Internet"? What on earth does that mean?
Comment: @user907560 At the outset, your question is indistinguishable from end-user support and doesn't provide the information we need to know that the flash drive works elsewhere. This further information helps a lot. +1.
Comment: @user907560 Server Fault is a site for professional system administrators, with a very specific scope described in our site [FAQ]. As it stands there is nothing about your question that indicates it is in the realm of "professional system administration" (as opposed to "end user asking a question about their personal/desktop machine") - This is why you are getting "negative feedback". Your question is not "bad", it just does not appear to be on-topic per the site's scope/FAQ.
Comment: This would be on-topic for SuperUser or Unix & Linux, but it doesn't fit here and since I can't discern whether those fires are wrong or really what you're asking about in regards to, "Without using the Internet" (which you're on), I'm not keen to migrate.
Comment: I try my best to explain my question, but all i get is negative feedback. It means that I cannot install any packages or anything.
Comment: I need to install my network card driver for my server via a USB stick.
Comment: @JeffFerland Why can't I just ask this question about my server here? I find it not very friendly of people to dump my question like that. I spend a lot of time researching and trying to explain it the best I can.
Answer: When mounting with -t usbfs, the source doesn't matter. usbfs is a DevFS virtual filesystem. Its contents are points to various devices.
Even USB drives are usually partitioned like hard drives, so you'll want to check ls /dev/sdc*. You'll probably see a /dev/sdc1. As many others have said, you'll find that mount usually detects the right filesystem. Mounting /dev/sdc directly is failing because you're trying to mount the partition table as a filesystem. Mounting with -t usbfs worked because virtual filesystem mounts ignore the source argument.
Comment: I would like to vote up, but I need to wait for some reputation. Thank you very much! Very thourough information.
Comment: My server is up again! :)
Answer: mount should detect the filesystem automatically in most cases. Your USB drive may be partitioned which is why sdc won't mount. Try the following:
mkdir /mnt/usb
mount /dev/sdc1 /mnt/usb

If this doesn't work, the output of blkid may help you identify the correct device name.
Comment: Thanks! I would like to vote up, but I need to wait for some reputation.
Answer: /dev/sdc is the full usb device, you cant mount it. You need to mount something like /dev/sdc1 (first partition) /sev/sdc2 (second partition), etc. The filesystem is autodetected, but  you need to add the mount point, for example:
mount /dev/sdc1 /mnt

Will mount the first partition  in /mnt directory.
Comment: Thanks! I would like to vote up, but I need to wait for some reputation.
Answer: to answer your question
Mounting a USB Mass Storage Device in Debian
identify your Stick with fdisk or similar and mount with
mount /dev/[device] /mnt

This works unless you have a an old debian version or strange filesystem on the stick.
However it seams you are asking the wrong question for your problem. Which is, "how do I install a driver for NetworkCard XY on debian (Version X) from CD or USB" ;-)


d3 - get scale of x an y for label

Question: I have created an x and y scale like this:
var xScale = d3.scale.linear()
    .domain([0, 20])
    .range([0, width]);

var yScale = d3.scale.linear()
    .domain([0, 20])
    .range([height, 0]);

I then use this to create an x and y axis as well as how to position a line with respect to these axis:
var line = {
    start: {x: 2, y: 3, type: 'start'},
    finish: {x: 14, y: 6, type: 'finish'}
  };

var g = svg.append('g');

  g.append('line')
      .style('stroke', 'blue')
      .attr('class', 'line')
      .attr('x1', xScale(line.start.x))
      .attr('y1', yScale(line.start.y))
      .attr('x2', xScale(line.finish.x))
      .attr('y2', yScale(line.finish.y));

I also position labels that tell where the x and y axis of the line are.  The end points of the line are draggable but I can't get the scaled coordinates in the drag event:
var drag = d3.behavior
     .drag()
     .on("drag", function(d) {
        var circle = d3.select(this),
            line = d3.select('.line'),
            isStart = circle.classed('start'),
            textClass = isStart ? ".textstart" : ".textfinish",
            lineX = isStart ? 'x1' : 'x2',
            lineY = isStart ? 'y1' : 'y2',
            text = d3.select(textClass);

        text.text( function (d) { return "( " + d.x  + ", " + d.y +" )"; });

        line.attr(lineX, d3.event.x).attr(lineY, d3.event.y);
        text.attr('x', d3.event.x).attr('y', d3.event.y - 20);
        circle.attr("cx", d.x = d3.event.x).attr("cy", d.y = d3.event.y);
     });

Here is a jsbin that shows the problem.
Answer: May I suggest you change the line:
text.text( function (d) { return "( " + d.x  + ", " + d.y +" )"; });

to:
text.text( function (d) { return "( " + d3.format(",.2f")(xScale.invert(d.x))  + ", " + d3.format(",.2f")(yScale.invert(d.y)) +" )"; });

That way you will display the value you want as in the following image:

The reason this happens is because the object d you are passing to the function, is the d3.behaviour which has as a x, and y, the mouse locations of where you dragged to. Thus you need to use invert so as to convert the x,y mouse coordinates, to their corresponding x,y values of the xScale, and yScale respectively.
The unfortunate thing is that in your object line, you have x, and y and this must have caused the confusion.
I hope this helps.
Comment: Thanks for that, could you please explain why this works?
Comment: I have updated my answer. I hope it is clearer now. :)

d3 - get scale of x an y for label


Https doesn't work with the SSL certificate

Question: I finally come to ask for your help. I actually lost hope against this issue.
I set up a first vps, with different domains (3x), all configured with SSL mod and everything is working well, permanent redirection from HTTP to HTTPS as well.
Unfortunately, I copy/paste this configuration into a second vps,and re-build all certificates and changed all virtual host settings. Everything is working well, except the SSL (https). And in the error or access log file, I found no errors regarding this...
On each browser, it's not working, I get a time out...If I checked on sslChecker, everything is ok but the certificate doesn't seems to be recognized for the domain www.------.be
Do you have any idea to help me please ?
Note: My default file (virtual host) is also configured for this website (like on my first configuration)
the test openssl connection return the following code :
- Verify return code: 18 (self signed certificate)
Thank you in advance !
The virtual host file :
<code>        <VirtualHost *:80>
        ServerAdmin firstname.lastname@example.com
        ServerName bubul.be
        ServerAlias www.bubul.be

        DocumentRoot /var/www/bubul.be/

        Redirect permanent / https://www.bubul.be/
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/bubul.be/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<VirtualHost *:443>
        DocumentRoot /var/www/bubul.be/
        ServerName bubul.be
        SSLEngine on
        SSLCertificateFile /etc/ssl/localcerts/bubul.pem
        SSLCertificateKeyFile /etc/ssl/localcerts/bubul.key
</VirtualHost>
</code>
Comment: Edit: I found the solution, finally after reading your book, I saw to make two certificate for two domain, and also for apache configuration, make it twice and then it works ;)

Thanks a lot for your help ;)
Answer: Checking with s_client gives the certificate and I see the following errors:

the certificate is self-signed, so browsers will not accept it by default and complain.
the certificate is only for bubul.be, not for www.bubul.be, so browsers will complain about hostname not matching certificate.
the certificate does not have X509v3 Extended Key Usage set to TLS Web Server Authentication, which means that browsers will not accept this certificate as a server certificate. Often this results in the browser just hanging around or giving some strange error, because a basic assumption about certificates is not met.
Comment: *"the certificate does not have X509v3 Extended Key Usage"* - that requirement shows up in [CA/Browser Forum Baseline Requirements](http://cabforum.org/wp-content/uploads/Baseline_Requirements_V1_1_9.pdf) Appendix (B)(3)(F). EKU is optional in [RFC 5280](http://www.ietf.org/rfc/rfc5280.txt). Is anyone using the CA/B to enforce policies? I generally avoid it because it causes problems in some Java validators.
Comment: From my experience all browsers require this setting and you get very strange errors if it is not provided. SSL libraries for programming languages on the other side mostly don't care.
Comment: Did I do something wrong in the command to get this kind of error ?
I suppose yes, I saw in documentation to read "multiple domain with one certificate", is that right ?
Comment: You have to add the appropriate settings to the openssl config file. See http://wiki.cacert.org/FAQ/subjectAltName, https://www.openssl.org/docs/apps/x509v3_config.html#Extended_Key_Usage_


Como identificar números "capicua" que possuem 5 dígitos?

Question: Segundo  esta definição do priberam.pt, um número capicua é:

Número que se lê igualmente da direita para a esquerda ou vice-versa e ao qual se atribui boa sorte.

Seguindo esse raciocínio, capicua seriam 12521, 37073, 10001, etc...
Como descobrir entre números de 5 dígitos, os que são capicua apenas utilizando cálculos matemáticos, removendo números que possuam todos os 5 dígitos idênticos como 55555, 33333, 00000, etc?
P.S.: Não importa a linguagem, somente a lógica para se desenvolver uma forma de resolver isso.
Comment: @GuilhermeLautert sim, creio que existam libs que façam isso, mas creio que assim não teria desafio :p
Comment: Posso apontar métodos não ortodoxos indiretos que fazem uso desnecessário de _features_ de uma linguagem?
Comment: @JeffersonQuesado se envolver um pouco da matematica na logica, claro que sim :)
Comment: @Piovezan é descobrir se um número que possua 5 algarismos é capicua. Essa é a essência da pergunta, apesar de muitas respostas não terem limitado a apenas 5(o que acabou tornando-as ainda mais interessante).
Comment: tem que ser por método matemático?
Comment: @Articuno Não sei se entendi bem a questão, você quer descobrir se um dado número é capicua ou gerar todos os números capicua? Ou alguma outra coisa?
Answer: Consideremos inicialmente um valor inteiro positivo de 5 dígitos que pode ser escrito como abcde. Da definição, temos que este valor será considerado um capicua se, e somente se, abcde for igual a edcba. Assim, temos a primeira condição que define nosso conjunto:

b, c e d pertencem ao conjunto dos números naturais, tal que 0 ≤ b, c, d ≤ 9;
a e e pertencem ao conjunto dos números naturais não nulos, tal que 0 < a, e ≤ 9;

Perceba que os dígitos a e e não podem ser 0, pois assim configuraria um número de 4 dígitos, visto que na matemática o zero a esquerda é ignorado.
Assim, considerando a forma polinomial dos números na base decimal, podemos escrever:

Sendo os números naturais, esta expressão somente é válida se, e somente se, a - e = 0 e b - d = 0; isto é, se a = e e b = d, como já seria esperado. Assim, podemos imaginar uma função:

Sendo x o número abcde. A função f(x) irá retornar 0 para qualquer número capicua, porém não somente eles. Em verdade, retornará 0 para qualquer valor que satisfazer a - e = -(b - d), tal como 65365, pois 6 - 5 = -(5 - 6). Tal problema pode ser contornado se considerarmos o módulo dos valores:

Assim continuará zero para os números capicuas e diferente de zero para qualquer outro valor. Porém, números com dígitos repetidos seriam considerados de igual forma, pois continuam satisfazendo tal condição. Para, então, identificar os números capicuas com dígitos repetidos, podemos imaginar um valor:

Colaboração de Jefferson Quesado.

Onde w será 0 para todos os capicuas de dígitos repetidos e 1 para qualquer outro capicua. Podemos então imaginar uma função g(x) de tal forma que:

retorne 1 para os capicuas não repetidos e qualquer outro valor para outros números, incluindo capicuas repetidos. Neste caso, g(x) será o próprio valor de w, então:

Assim, podemos calcular os valores de a, b, c, d e e com:

Podemos generalizar, então, para uma função que obtém o n-ésimo dígito de um número:

JavaScript
Farei a implementação em JavaScript para aproveitar que é executável pelo snippet do site.

const digit = n => x => (x % Math.pow(10, n) - x % Math.pow(10, n-1)) / Math.pow(10, n-1);

const a = digit(5);
const b = digit(4);
const c = digit(3);
const d = digit(2);
const e = digit(1);

const g = x => Math.ceil(
    Math.abs(
        (a(x)+1000)/(b(x)+1000) + (b(x)+1000)/(c(x)+1000) + (c(x)+1000)/(d(x)+1000) + (d(x)+1000)/(e(x)+1000) - 4
    )
);

const f = x => Math.abs(a(x) - e(x)) + Math.abs(b(x) - d(x)) + g(x);

let capicuas = 0;

for (let x = 10000; x < 100000; x++) {

    // Verifica se é capicua:
    if (f(x) === 1) {

        capicuas++;

        // Confirma se realmente é invertendo a string:
        if (x.toString() != x.toString().split('').reverse().join('')) {
            console.log(`Não é capicua, mas foi considerado: ${x}.`)
        }

    } else {

        // O número é capicua, mas foi desconsiderado pela função:
        if (x.toString() == x.toString().split('').reverse().join('')) {
            console.log(`É capicua, mas não foi considerado: ${x}.`)
        }

    }
}

console.log(`Foram encontrados ${capicuas} números capicuas de 5 dígitos.`);
Comment: @RovannLinhalis problema solucionado.
Comment: Essa resposta deveria ser impressa e emoldurada em ouro
Comment: No intervalo `10000-100000` foram encontrados 891 números capicuas, sua função está retornando 810, possivelmente o problema já citado acima. Mas gostei muito da resposta =]
Answer: Basicamente é necessário inverter o número e checar se ele é igual à entrada original.
Essa implementação funciona pra números com qualquer quantidade de dígitos.
Implementação em C#:
using static System.Console;

public class Program
{
    public static void Main()
    {
        int num;
        int original = num = 51315;
        int rev = 0;

        while (num > 0)
        {
            int dig = num % 10; //Captura cada dígito

            rev = rev * 10 + dig;
            // (^) Adiciona o dígito na variável 'rev'.
            // Como usamos a base 10, tudo o que já existe
            // em rev precisa ser mulplicado por 10

            num = num / 10;
            // Controla o loop
        }

        WriteLine(original == rev ? "É capícua" : "Não é capícua");
    }
}

Veja funcionando no .NET Fiddle | Código no GitHub para referência futura
Answer: Para ser capicua, basta separar todos os dígitos e comparar o dígito d_a com seu complemento d_(5-a+1). Note que o dígito do meio é ignorado porque ele é igual a ele mesmo.
Considere // a operação de divisão inteira, conforme descrita pela linguagem Python. Considere linhas que começam por # como comentários.

Dica do @AndersonCarlosWoss, inicialmente eu não havia definido que estava usando divisão inteira

d1 = n // 10000
r1 = n % 10000

d2 = r1 // 1000
r2 = r1 % 1000

d3 = r2 // 100
r3 = r2 % 100

d4 = r3 // 10
r4 = r3 % 10

d5 = r4

# garantia de capicua:
d1 == d5 and d2 == d3

# garantia de que tem algum dígito distinto:
not (d1 == d2 and d2 == d3 and d3 == d4 and d4 == d5)

# portanto, para ser capicua com algum dígito distinto
return d1 == d5 and d2 == d3 and not (d1 == d2 and d2 == d3 and d3 == d4 and d4 == d5)

Answer: Eu posso definir uma palavra como sendo um conjunto de tuplas formadas por caracter/posição. Assim, a palavra banana teria a seguinte representação matemática:
{
  ('b',0),
  ('a',1),
  ('n',2),
  ('a',3),
  ('n',4),
  ('a',5)
}

Posso mudar um pouco a definição para que cada letra seja mapeada para um conjunto de posições; então, banana ficaria assim:
{
  ('b',{0}),
  ('a',{1,3,5}),
  ('n',{2,4})
}

Algo interessante dessa definição é que, se a minha letra não estiver na palavra, posso associar ela ao conjunto vazio:
{
  ('a',{1,3,5}),
  ('b',{0}),
  ('c',{}),
  ('d',{}),
  ('e',{}),
  ('f',{}),
  ('g',{}),
  ('h',{}),
  ('i',{}),
  ('j',{}),
  ('k',{}),
  ('l',{}),
  ('m',{}),
  ('n',{2,4}),
  ('o',{}),
  ('p',{}),
  ('q',{}),
  ('r',{}),
  ('s',{}),
  ('t',{}),
  ('u',{}),
  ('v',{}),
  ('w',{}),
  ('x',{}),
  ('y',{}),
  ('z',{})
}

Esse tipo de estrutura de dados, de uma chave mapear para um conjunto de elementos, é chamada de multimapa. De modo geral, o multimapa tem duas operações: inserir valor e resgatar conjunto.
Então, no multimapa de banana (doravante denominado de mm_banana), podemos adicionar s na posição 6:
mm_banana.put('s', 6)

// conteúdo de mm_banana modificado sem conjuntos vazios:

{
  ('a',{1,3,5}),
  ('b',{0}),
  ('n',{2,4}),
  ('s',{6})
}

Se adicionamos 's',6, 'e',7 e 's',8 a mm_banana, ficaria assim:
mm_banana.put('s', 6)
mm_banana.put('e', 7)
mm_banana.put('s', 8)

// conteúdo de mm_banana modificado sem conjuntos vazios:

{
  ('a',{1,3,5}),
  ('b',{0}),
  ('e',{7}),
  ('n',{2,4}),
  ('s',{6,8})
}

A representação decimal de um número é um multimapa de palavra (conforme descrito acima), sendo que o alfabeto da chave são os dígitos decimais.
Para, a partir de um número qualquer x, obter sua representação decimal, fazemos divisões sucessivas e armazenamos o resto. Por uma questão de simplicidade, vamos considerar a escrita da palavra decimal em little-endian, onde os menos significativos vem primeiro. Assim, o número 0x10 tem sua representação em palavra decimal little-endian 61. O seguinte código em Python a seguir demonstra isso:
def representacao_base(x, base):
  digit_pos = 0
  while (x > 0):
    digito = x % base
    print("digito %d, posição %d" % (digito, digit_pos));
    x //= base
    digitPos += 1

representacao_base(0x10, 10)

Veja funcionando no ideone.
Notou que eu escrevi de modo generalizado para qualquer base? Pois é, a vantagem disso é que podemos verificar se um número é capicua em qualquer base mais adiante. Então, 12 seria representado como 0011 na base 2 usando little-endian. O endianismo não influi na decisão do número ser capicua ou não, assim como escrever uma palavra ao contrário não influencia no fato de ela ser ou não palíndroma.
Para detectar que um número é capicua, usamos o algoritmo acima para desmembrá-lo e colocar cada dígito como chave do multimapa, cada posição como sendo o valor sendo inserido no multimapa. Em Java, alcancei isso da seguinte maneira:
public class Multimapa {
    Set<Integer>[] pos;
    int size;
    int base;

    private void initPos(int base) {
        pos = new HashSet[base];

        for (int i = 0; i < base; i++) {
            pos[i] = new HashSet<>();
        }
    }

    public Multimapa(int n, int base) {
        this.base = base;
        initPos(base);

        if (n == 0) {
            pos[0].add(0);
            size = 1;
            return;
        }
        if (n < 0) {
            n = -n;
        }
        int digitPos = 0;
        while (n > 0) {
            int digit = n % base;
            pos[digit].add(digitPos);

            n /= base;
            digitPos++;
        }
        size = digitPos;
    }
}

Note que, como a chave é um dígito, e um dígito por sua vez é um número inteiro, o multimapa é fornecido pelo atributo pos; pos[7] vai obter as posições em little-endian que o dígito 7 ocupa na base passada. Detalhe: a chave é um inteiro e o valor é um conjunto (set em inglês significa conjunto em português, no contexto matemático) de inteiros.
Assim, para demonstrar que a classe Multimapa se comporta como a estrutura de dados multimapa descrita acima, preciso mostrar que ela suporta as mesmas operações de inserção e de resgate.
A operação de resgate é simples. Dado um dígito d, pos[d] resgata o conjunto correspondente. Para fazer a adição da posição p ao dígito d, basta fazer pos[d].add(p). Note que essa é uma operação idempotente, então pos[d].add(p); tem o mesmo efeito de pos[d].add(p); pos[d].add(p); pos[d].add(p);.
Lembra da representação da palavra com multimapa usando conjunto vazio para a não existência daquela letra na palavra? Estamos usando o mesmo conceito aqui, para facilitar as operações de resgate e adição sem precisar de tratativas adicionais nem ofender a definição.
Para determinar se o número é repetido, podemos verificar se ele tem mais de um dígito não nulo. Para tal, basta iterar nos dígitos e verificar o tamanho dos conjuntos. Se existir apenas um dígito com tamanho não nulo, então o número é repetido. Para detectar se é não repetido, basta fazer a inversão lógica. Como não há a opção de número sem dígito, então o mínimo de dígitos com pelo menos uma posição no número é 1. Portanto, a negação de ser número com um único dígito é ter a contagem > 1.
private static boolean ehNaoRepetido(Multimapa mm) {
    int nDigitosDistintos = 0;

    for (int i = 0; i < mm.base; i++) {
        nDigitosDistintos += mm.pos[i].size() > 0? 1: 0;
    }

    return nDigitosDistintos > 1;
}

Para verificar se um número é capicua na base definida, precisamos garantir que todo dígito na posição p tem outro dígito na posição especular p'. Um caso especial é o número da posição intermediária com números de tamanho ímpar: ele é seu próprio especular, portanto ele pode ser ignorado.
A relação entre p, p' e o tamanho size do número é:
p + p' = size - 1

      ||
      \/

p' = size - 1 - p

A posição intermediária t, que vai ser ignorada, é calculada assim:
t = size % 2 == 1? size/2: -1;

Como só existem posições preenchidas a partir do 0, colocar -1 vai garantir que t sempre será ignorado para números de um tamanho par de dígitos.
Assim, a seguinte verificação trata disso:
private static boolean ehCapicua(Multimapa mm) {
    int somaSimetrica = mm.size - 1;
    int posIgnorada = mm.size % 2 == 1? mm.size/2: -1;

    for (int d = 0; d < mm.base; d++) {
        for (Integer p: mm.pos[d]) {
            // só tenta verificar se tem o complemento se e somente se não é ignorado
            if (p != posIgnorada) {
                int posComplemento = somaSimetrica - p;

                // se não existe o dígito na posição complementar, então não é capicua
                if (!mm.pos[d].contains(posComplemento)) {
                    return false;
                }
            }
        }
    }
    return true;
}

Segue o código completo usado para verificar se um número é capicua não repetido nas bases determinadas:
package capicua;

import java.util.HashSet;
import java.util.Set;

public class Multimapa {

    Set<Integer>[] pos;
    int size;
    int base;

    private void initPos(int base) {
        pos = new HashSet[base];

        for (int i = 0; i < base; i++) {
            pos[i] = new HashSet<>();
        }
    }

    public Multimapa(int n, int base) {
        this.base = base;
        initPos(base);

        if (n == 0) {
            pos[0].add(0);
            size = 1;
            return;
        }
        if (n < 0) {
            n = -n;
        }
        int digitPos = 0;
        while (n > 0) {
            int digit = n % base;
            pos[digit].add(digitPos);

            n /= base;
            digitPos++;
        }
        size = digitPos;
    }

    public static void main(String... args) {
        int qntNumerosInteressantes = 0;
        for (int i = 0; i < 99999999; i++) {
            if (julga(i, 10)) {
                System.out.println(i + " é capicua não repetido na base " + 10);
                qntNumerosInteressantes++;
            }
        }

        System.out.println("quantidade de números capicua e não repetidos nas base 10: " + qntNumerosInteressantes);

        qntNumerosInteressantes = 0;
        for (int i = 0; i < 99999999; i++) {
            if (julga(i, 16)) {
                System.out.println(i + " é capicua não repetido na base " + 16);
                qntNumerosInteressantes++;
            }
        }

        System.out.println("quantidade de números capicua e não repetidos nas base 16: " + qntNumerosInteressantes);

        meta_julga(0xffeff, 10); // 1048319
        meta_julga(121, 10);
        meta_julga(1221, 10);
        meta_julga(12721, 10);
        meta_julga(12721, 16); // 31b1
        meta_julga(0xffeff, 16);
        meta_julga(0xffdead, 16);
        meta_julga(0101, 8);
        meta_julga(0171, 8);
        meta_julga(01267621, 8);
        meta_julga(01267421, 8);

        meta_julga(5, 2); // 101
        meta_julga(6, 2); // 110
        meta_julga(7, 2); // 111
        meta_julga(4, 2); // 10
        meta_julga(16, 3); // 121
        meta_julga(10, 3); // 101
        meta_julga(12, 3); // 110
    }

    private static void meta_julga(int n, int base) {
        if (julga(n, base)) {
            System.out.println(n + " é capicua não repetido na base " + base);
        } else {
            System.out.println(n + " não é capicua não repetido na base " + base);
        }
    }

    // retorna verdade se todos os dígitos do número passado forem idênticos
    //
    // algoritmo de detecção: se, por acaso, existirem pelo menos dois dígitos com 1 ou mais posições, então é não repetido.
    // caso seja tudo zero exceto por um único dígito, então é repetido
    private static boolean ehNaoRepetido(Multimapa mm) {
        int nDigitosDistintos = 0;

        for (int i = 0; i < mm.base; i++) {
            nDigitosDistintos += mm.pos[i].size() > 0? 1: 0;
        }

        return nDigitosDistintos > 1;
    }

    // retorna verdadeiro caso seja capicua
    //
    // algoritmo: verifica cada dígito; se for de tamanho `t` ímpar, então o dígito da posição `floor(t/2)` deve ser ignorado
    // para um dígito `d` na posição `p` não ignorado, é necessário existir um outro dígito `d` na posição complementar `p'`, tal que `p + p' = t - 1`
    private static boolean ehCapicua(Multimapa mm) {
        int somaSimetrica = mm.size - 1;
        int posIgnorada = mm.size % 2 == 1? mm.size/2: -1;

        for (int d = 0; d < mm.base; d++) {
            for (Integer p: mm.pos[d]) {
                // só tenta verificar se tem o complemento se e somente se não é ignorado
                if (p != posIgnorada) {
                    int posComplemento = somaSimetrica - p;

                    // se não existe o dígito na posição complementar, então não é capicua
                    if (!mm.pos[d].contains(posComplemento)) {
                        return false;
                    }
                }
            }
        }
        return true;
    }

    private static boolean julga(int n, int base) {
        Multimapa mm = new Multimapa(n, base);

        if (ehNaoRepetido(mm)) {
            if (ehCapicua(mm)) {
                return true;
            }
        }

        return false;
    }
}

Veja funcionando no ideone.
Answer: É possível obter-se uma estimativa de quantos dígitos há em um número usando o logaritmo na base 10:

O logaritmo é uma função estritamente crescente. Assim sendo, se arredondarmos para baixo o seu valor, teremos isso:

De 1 a 9: Resultado é 0.
De 10 a 99: Resultado é 1.
De 100 a 999: Resultado é 2.
De 1000 a 9999: Resultado é 3.
...

Se somarmos 1 a este valor, teremos o número de dígitos na base 10 de um número. Essa fórmula pode ser generalizada para outras bases ao trocar-se a base do logaritmo para a base correspondente. Com isso, podemos montar essa função:
function digitos(numero) {
    return numero === 0 ? 1 : Math.floor(Math.log10(numero)) + 1;
}

É possível determinar-se se um número tem todos os dígitos repetidos com base nisso daqui. Entretanto tomei uma abordagem um pouco diferente:

Um número terminado em zero que não seja o próprio zero nunca é uma repetição de dígitos.
Qualquer número que consista em uma repetição de dígitos, ao ser multiplicado por 9, terá todos os dígitos resultantes, exceto talvez o primeiro e o último como uma sequência de noves. Isso tem a ver com o fato de que na tabuada do 9, todos os múltiplos de 9 entre 9 até 90 quando têm os seus dígitos somados, produz 9 como resultado. Como consequência, ao fazer a multiplicação de um número que é uma repetição por 9, esses dígitos irão se somar em todas as posições exceto a primeira e a última, produzindo vários noves no meio do número.
Seja  o número que é uma repetição de dígitos e seja . Se  terminar com 1 (vamos chamar esse último dígito de ), o último dígito de  (vamos chamá-lo de )) vai ser 9. Se terminar com 2, será 8 (). Se terminar com 3, será 7 (). Ou seja, , e portanto . Logo, ao fazermos , teremos 10 como resultado no último dígito e vamos deslanchar uma sequência de "vai-uns" em todos os noves tendo então um número  tal que , ,  e .
Se  começa com 1, então  começa com 9. Se  começa com 2, então  começa com 1. Se  começa com 3, então  começa com 2... Isso pode ser visto na tabuada do 9. Ao somar-se 1 ao primeiro dígito de , se tem um número cujo primeiro dígito é o primeiro dígito de . Isso significa que, após toda a sequência de "vai-uns" do item acima, temos . Logo, ao fazermos , se e somente se o resultado for uma potência de 10, é porque  é uma repetição de dígitos. Podemos verificar se é uma potência de 10 se o logaritmo na base 10 for inteiro.

Juntando tudo isso:
function repetido(numero) {
    if (numero === 0) return true;
    var d = numero % 10;
    if (d === 0) return false;
    var g = numero * 9 + d;
    var n = Math.log10(g / d);
    return n === Math.floor(n);
}

Um número pode ser verificado se é palíndromo ao separar os dígitos utilizando exponenciação, módulo e arredondamentos (nada de strings) e verificados em pares de fora para dentro.
Juntando tudo isso:
function palindromo(numero) {
    var numDigitos = digitos(numero);
    for (var i = 0; i < numDigitos / 2; i++) {
        var a = Math.floor(numero / Math.pow(10, i)) % 10;
        var b = Math.floor(numero / Math.pow(10, numDigitos - i - 1)) % 10;
        if (a !== b) return false;
    }
    return true;
}

Por fim, um número capicuia é um palíndromo que não é uma repetição:
function capicua(numero) {
    return !repetido(numero) && palindromo(numero);
}

Abaixo está o código que verifica se um número é capicuia (para qualquer quantidade de dígitos). Também tem um teste que verifica se a implementação está correta para todos os números de 0 até 99999. O teste foi feito para mostrar apenas os números que deram errado (e do jeito que está não mostra nenhum, dá certo para todos). Depois disso, ele mostra alguns exemplos para teste.

function digitos(numero) {
    return numero === 0 ? 1 : Math.floor(Math.log10(numero)) + 1;
}

function repetido(numero) {
    if (numero === 0) return true;
    var d = numero % 10;
    if (d === 0) return false;
    var g = numero * 9 + d;
    var n = Math.log10(g / d);
    return n === Math.floor(n);
}

function palindromo(numero) {
    var numDigitos = digitos(numero);
    for (var i = 0; i < numDigitos / 2; i++) {
        var a = Math.floor(numero / Math.pow(10, i)) % 10;
        var b = Math.floor(numero / Math.pow(10, numDigitos - i - 1)) % 10;
        if (a !== b) return false;
    }
    return true;
}

function capicua(numero) {
    return !repetido(numero) && palindromo(numero);
}

function testeNumero(numero) {

    var numeroStr = "" + numero;
    var numDigitos = numeroStr.length;

    var palindromoStr = numeroStr.split("").reverse().join("") === numeroStr;

    var repetidoStr = true;
    for (var i = 1; i < numDigitos; i++) {
        if (numeroStr.charAt(i) !== numeroStr.charAt(0)) {
            repetidoStr = false;
            break;
        }
    }

    if (digitos(numero) !== numDigitos) {
        document.write("Falhou digitos com " + numero + ".
");
    }

    if (palindromo(numero) !== palindromoStr) {
        document.write("Falhou palindromo com " + numero + ".
");
    }

    if (repetido(numero) !== repetidoStr) {
        document.write("Falhou repetido com " + numero + ".
");
    }

    if (capicua(numero) !== (!repetidoStr && palindromoStr)) {
        document.write("Falhou capicua com " + numero + ".
");
    }
}

function teste() {
   document.write("Começando...
");
   for (var i = 0; i < 100000; i++) {
        testeNumero(i);
   }
   document.write("Teste concluído.
");
}

teste();
document.write("53035 é capicua? " + (capicua(53035) ? "Sim" : "Não") + "
");
document.write("53035 é repetido? " + (repetido(53035) ? "Sim" : "Não") + "
");
document.write("53567 é capicua? " + (capicua(53567) ? "Sim" : "Não") + "
");
document.write("8765678 é capicua? " + (capicua(8765678) ? "Sim" : "Não") + "
");
document.write("369 é capicua? " + (capicua(369) ? "Sim" : "Não") + "
");
document.write("363 é capicua? " + (capicua(363) ? "Sim" : "Não") + "
");
document.write("55555 é capicua? " + (capicua(55555) ? "Sim" : "Não") + "
");
document.write("55555 é repetido? " + (repetido(55555) ? "Sim" : "Não") + "
");
document.write("55455 é repetido? " + (repetido(55455) ? "Sim" : "Não") + "
");

Tentei achar uma fórmula que verificasse se é palíndromo não apenas sem usar strings, mas também sem usar laços e nem recursão. Entretanto, não consegui e tive que me contentar em ficar com um laço. Nesta tentativa, o melhor que consegui é provar que todo o número palíndromo com uma quantidade par de dígitos é múltiplo de 11 (mas nem todo múltiplo de 11 é palíndromo).
Answer: Fiz alguns exemplos em C#, porém convertendo o número para string:
Primeiro:
public static bool Capicua(int x) //0.046s
{
    string s = x.ToString();
    int l = s.Length/2;

    for (int i =0; i<= l; i++)
    {
        if (s[i] != s[s.Length-1-i])
        {
            return false;
        }
    }

    return true;

}

Segundo:
public static bool Capicua2(int x) //0.063s
{
    string s = x.ToString();
    return s == Reverse(s);
}

public static string Reverse(string s )
{
    char[] charArray = s.ToCharArray();
    Array.Reverse( charArray );
    return new string( charArray );
}

Método auxiliar para remover os número em que todos os algarismos são iguais:
public static bool TodosIguais(int x)
{
    string s = x.ToString();
    char c = s[0];
    for (int i =1; i< s.Length;i++)
    {
        if (s[i] != c)
        {
            return false;
        }
    }

    return true;

}

Rodando a aplicação:
public static void Main()
{
    int encontrados = 0;
    for (int i =10000; i <= 90000; i++)
    {
        //if (!TodosIguais(i) && Capicua(i))
        //if (!TodosIguais(i) && Capicua2(i))
        if (CapicuaLINQ(i))
        {
            Console.WriteLine("Capicua: "+ i);
            encontrados++;
        }
    }
    Console.WriteLine("Encontrados: "+ encontrados);
}

Resultado:

Capicua: 10001
Capicua: 10101
Capicua: 10201
Capicua: 10301
Capicua: 10401
Capicua: 10501
Capicua: 10601
...
Capicua: 89698
Capicua: 89798
Capicua: 89898
Capicua: 89998
Encontrados: 792

Porém, o código postado pelo LINQ como resposta, não faz a conversão para string, o que é melhor, sendo mais rápido o tempo de execução. Só fiz a alteração para não pegar os números em que todos os algarismos são iguais:
///LINQ
public static bool CapicuaLINQ(int x) //0.019s
{
    int num;
    int original = num = x;
    int rev = 0;
    int digAnt =  num % 10;
    bool todosIguais = true;

    while (num > 0)
    {
        int dig = num % 10; //Captura cada dígito

        if (dig != digAnt)
        {
            todosIguais = false;
        }

        rev = rev * 10 + dig;
        // (^) Adiciona o dígito na variável 'rev'.
        // Como usamos a base 10, tudo o que já existe
        // em rev precisa ser mulplicado por 10

        num = num / 10;
        // Controla o loop
    }

    return original == rev && !todosIguais;

}

Coloquei no .NetFiddle: https://dotnetfiddle.net/IWXftW
Comment: Sim, estava esperando uma resposta transformando em string xD Por mais ineficiente, acho que é uma alternativa que precisava estar contida aqui
Comment: Faltou os capicuas iniciados por 9, tal como 92529.
Comment: @VictorStafusa o `for` só vai até `90000`, bastaria aumentar o limite dele =]
Answer: Uma lógica que encontrei foi a seguinte, separando 3 informações a partir do número com 5 dígitos, que chamo de x:

Pegue os 2 primeiros dígitos (vou chamar de left2).
Pegue os 2 últimos dígitos e reverta a ordem deles (vou chamar de
right2_reverse).
Pegue apenas o primeiro dígito (vou chamar de x1).

O número do meio (o terceiro) é irrisório e não entra na questão.
Com essas 3 informações, basta aplicar a comparação:
O left2 é igual ao right2_reverse?
Se SIM, então é capicua.
Mas você não quer números onde todos os dígitos são iguais, tipo 00000, 11111 etc...
Basta dividir o número x pelo seu primeiro dígito x1 (afinal todos são iguais). Se o resultado for diferente de 11.111, então é capicua sem ter todos os dígitos iguais.
Sempre que um número qualquer onde todos os dígitos são iguais for dividido por 1 dígito desse número, o resultado será uma sequência de 1 com o mesmo número de dígitos:
Ex. 99.999 / 9 = 11.111

O problema é o número 00.000, que se for dividido por 0, dá erro, devido à regra matemática onde "nenhum número pode ser dividido por zero".
Neste caso, basta verificar se o valor absoluto do número x é zero. Se for, basta ignorar.
Exemplos:
Seja o número x = 37073
left2 = 37
right2_reverse = 37

São iguais, logo é capicua.

Seja o número x = 37075
left2 = 37
right2_reverse = 57

São diferentes, logo não é capicua.
Fiz um código em JavaScript para verificação:

digitos = 5;

for(x=0;x<=99999;x++){
 if( x.toString().length < digitos ){
  while(x.toString().length < digitos){
   x = "0"+x;
  }
 }
 left2 = x.toString().substring(0,2);
 right2_1 = x.toString().substring(x.toString().length-2,x.toString().length-1);
 right2_2 = x.toString().substring(x.toString().length-1,x.toString().length);
 right2_reverse = right2_2+right2_1;

 x1 = parseFloat(x.toString().substring(0,1));

 if(left2 == right2_reverse && x/x1 != 11111 && Math.abs(x) != 0){
  capicua = " capicua!";
 }else{
  capicua = "";
 }
 $("#teste").append(x+capicua+"
");
}

Outra forma programática seria dividir o número x pelo seu valor espelhado, se
  o resultado for igual a 1, então é capicua.
Comment: Vale comentar que o número 00.000, matematicamente, não possui 5 dígitos, pois será apenas 0. Então o problema de dividir por 0 não existe, de fato. O mesmo vale para os números que você adiciona o 0 à esquerda. No domínio matemático, isso não é necessário, pois um valor como 05650 não é capicua porque ele é, na verdade, 5650 (4 dígitos).
Comment: Entendo seu ponto, só não concordo em analisar o número como *string* em um problema que estamos tratando no domínio matemático. Em programação, seria como se `x`fosse do tipo *int*, então fazer `x = 01` acaba sendo o mesmo que `x = 1`.
Comment: @AndersonCarlosWoss `01` não é `1` no ES3 huahuehaeuh
Comment: Nota importante para o leitor: como o número tem cinco dígitos, `x1` é garantido ser distinto de zero, portanto a divisão sempre será válida
Comment: Por isso que a pergunta pede por "capicuas", que é o equivalente de palíndromo para números, mas não me entenda errado, só achei necessário comentar esse detalhe. Isso não implica, necessariamente, que sua resposta esteja errada e precise correção :D
Comment: @AndersonCarlosWoss Vc está certo. Mas neste caso o número é mais uma string do que número em si. É como na loteria, onde existem número com zero à esquerda, tipo, 05.381.
Comment: @AndersonCarlosWoss Mas o termo "palíndromos" se aplica a palavras, e não a números. Tudo bem que pode ser aplicado a números, mas neste caso, o número vira uma palavra: _duzentos e doze_ é um palíndromo, quando se escreve 212.
Comment: @AndersonCarlosWoss Há um pequena diferença entre um termo e outro. Capicua é aplicada a algarismos, enquanto que palíndromo é a palavras.
Comment: Enfim, deu pra entender rsrs.
Comment: @AndersonCarlosWoss Agradeço a edição, ficou perfeita.
Answer: Já agora uma uma solução batuteira (só sei fazer destas ☺): gerá-los em vez de reconhecê-los.
A ideia geral é: uma capicua de 5 digitos tem a seguinte estrutura abcde em que:

ab é o inverso de de ou seja de = b*10+a (ou ainda ab%10*10 + int(ab/10))
inv(ac)= mod(ab,10)×10 + int(ab/10)

portanto o conjunto das capicuas de 5 digitos é
{ ab×1000 + c×100 + inv(ab) |  ab ∈ 10..99, c ∈ 0..9 }

para verificar se um número é capicua: "yes" se ele ∈ conjunto

Para cria um programa concreto, por exemplo Usando Perl, podemos escrever:
perl -E 'say for map {$a=$_;
                      map {$a*1000+$_*100 +$a%10*10+int($a/10)}
                          0..9
                     }
                     10..99 '

para gerar as capicuas de 5 digitos;
Para as reconhecer: BEGIN{calcula conjunto} para cada linha: dizer se pertence
perl -nlE '
  BEGIN{ $p{$_}=1
         for map {$a=$_;map {$a*1000+$_*100+$a%10*10+int($a/10)} 0..9} 11..99}
  say "yes" if $p{$_}'

Comment: Só que a questão é "como identificar" é apenas de números com 5 dígitos. E como não conheço a linguagem, a explicação da lógica aqui é essencial.
Comment: Falando em gerar número, você me deu uma ideia de como responder em Prolog...
Comment: Eu curti a ideia de gerar, mas estou com o @Articuno : isso para mim é algo arcano e mágico! Se fosse possível inclusive por a saída no ideone você estaria me ajudando a entender Perl
Comment: @JeffersonQuesado, juntei uma explicação com conjuntos em compreensão. Acham que se entende?
Comment: Entendo sua boa vontade, mas o objetivo da pergunta é identificar numeros capicuas, não gerá-los.
Comment: Articuno: eu sei (por isso dizer que é batota) identificar(x) = x ∈ conjunto
 gerado.


Can I play an arpeggio of the first chord of the scale over this chord progression?

Question: I am writing a music piece in E minor using the chord progression Em-C-Bm-G.
I independently wrote an arpeggio in the chord e minor (together with some passing notes) and I want to add this arpeggio to the song over the chord progression.
My question is, am I allowed to do this?
The arpeggio continuously plays in E minor while the chords in the progression change.
Should I adapt the arpeggio on the progression?
Comment: I suggest you edit your chords to read Em-C-Bm-G. Using upper and lower case is used in Roman numeral analysis but not in chord symbols. Also I assume you mean G major and not G minor since you are in the key of E minor.
Answer:
The arpeggio continuously plays in E minor while the chords in the progression change.

Should I adapt the arpeggio on the progression?

Music is art. You can do whatever you want.
But, it seems clear to me you are trying understand some basic harmony concepts like combining chord tones and non-chord tone to follow a harmonic template (chord progression.) You're trying to learn about musical conventions.
Two concepts that you should look into are pedal points and ostinato.
A pedal point is when a single tone is held for a long time while harmony in other voices continues to change, and importantly, some of the continuing harmony deliberately clashes with the pedal tone! Usually the changing harmonies return to match the pedal tone, and the commonest pedal tones in tonal music are the dominant and tonic. From a certain "high level" analysis the harmony of a pedal is just an elaboration of a dominant or tonic chord where the whole passage can be analyzed as either V or I.
The connection between your idea to a pedal is that you have one thing - the E minor chord - being held while the other parts move against it. You have a sort of "pedal chord." If your chord progression came back to E minor, like Em-C-B-G-Em or something similar, it would be following the concept of a pedal but with more dissonance from multiple clashing tones.
You can generalize this idea even further. You mentioned that your E minor arpeggio uses passing tones. The super high level concept is the ebb and flow of consonance to dissonance to consonance, stability to instability to stability. Passing tones, pedal points, tonic to dominant to tonic, etc. exhibit this idea. It's a basic fundamental of tonal harmony.
Ostinato is when a fairly short melody idea is repeated over and over. If your E minor arpeggio not only holds the chord, but also repeats a short figure, it would be an ostinato.
Answer: You are allowed to do exactly what you like in music! As long as no-one gets hurt.
There are many people like yourself who think there is a set of rules that must be followed. Please rid yourself of that notion. A lot of those 'rules' came about through certain things seeming to work well, but they're guidelines rather than rules.
It's your music, you can do what you like with it. If others like it, all well and good - if not, then there's your answer, sort of.
Now to the question! Usually, what sounds best is a change of notes when there's a change of chord. Otherwise there will be clashes. Sometimes, not always. Obviously the Em arp. works over Em. Then comes a C chord. Along with the Em arp., it can work, as it will produce not a straight C chord, but a Cmaj7, which sounds fine in that place.
The Bm chord that follows has B, D, F♯ in its make-up. None are the same as E, G, B from Em. So there will be clashes there. The chord G has G and B, so against the Em arp. will make a G6, again, fine.


Como pegar o nome de um ID com PHP

Question: Estou desenvolvendo uma aplicação que faz leitura de arquivos XML.
Já consigo percorrer todo XML e pegar os dados que quero, porém surgiu uma necessidade, todo XML vem com um id diferente, uma espécie de chave de acesso, porém essa chave de acesso vem em um id.
Como posso pegar o dado desse id e colocar em uma variável?
Comment: Caso acrescente seu código a pergunta fica mais fácil para ajudar e ser objetivo na resposta. Abraço
Comment: deu certo a solução?
Comment: Boa Noite amigo, não eu tou usando outro metodo diferente do simplexml_load, estou tentando pegar seu modelo e adequar com o metodo que estou usando pra tentar pegar o valor do ID
Comment: com o que eu coloquei abaixo vc consegue acessar o que vc precisa, inclusive coloquei dois exemplos. Depois dê uma olhada
Comment: load($arquivos) or die("Erro ao carregar arquivo XML");
  //Entra dentro do NÓ pai do XML
  $arquivos = $xml->getElementsByTagName( "nfeProc" );
Comment: Basicamente essa e a forma que estou instanciando o XML e fazendo a leitura dos Nodes, eu ja usei o simplexml_load mas não me adequei, preferi usar a biblioteza DomDocument e acessar o XML via Load, por isso do modo que fez o exemplos não tive sucesso, preciso acessar o ID atravesse do metodo que estou usando, de todo modo seus exemplos foram otimos
Comment: é bom informar no na pergunta a maneira como vc está trabalhando assim conseguimos ser mais objetivos e te ajudar melhor. abraço
Comment: Verdade, faltou em informar o metodo, Obrigado abraço !
Answer: Boa tarde,
você pode acessar da seguinte maneira:
$domXml = simplexml_load_string($textoXml);
$nCh = preg_replace("/[^0-9]/","",$domXml->NFe->infNFe["Id"]);

observe que a variável $domXml, deve ser ou sua string com o XML.
Segue exemplo: Um exemplo com arquivo (obviamente vc vai substituir por um xml que vc está usando). E outr exemplo com string. Eu copiei um xml para uma string.
<?php

    //Um Exemplo com arquivo
    $domXml = simplexml_load_file("31150201492857000139550010004869401111010024.xml");

    $textoXml = '<?xml version="1.0" encoding="UTF-8"?><nfeProc versao="2.00" xmlns="http://www.portalfiscal.inf.br/nfe"><NFe xmlns="http://www.portalfiscal.inf.br/nfe"><infNFe versao="2.00" Id="NFe31150201492857000139550010004869401111010024"><ide><cUF>31</cUF><cNF>11101002</cNF><natOp>VENDA DE MERCADORIAS SUJEITA AO REGIME DE S.T. - SUBSTITUIDO</natOp><indPag>1</indPag><mod>55</mod><serie>1</serie><nNF>486940</nNF><dEmi>2015-02-10</dEmi><dSaiEnt>2015-02-10</dSaiEnt><tpNF>1</tpNF><cMunFG>3154606</cMunFG><tpImp>1</tpImp><tpEmis>1</tpEmis><cDV>4</cDV><tpAmb>1</tpAmb><finNFe>1</finNFe><procEmi>0</procEmi><verProc>2.0</verProc></ide><emit><CNPJ>01492857000139</CNPJ><xNome>PACALUZ COMERCIO E LOGISTICA LTDA</xNome><xFant>PACALUZ COM.LOGISTICA-MATRIZ</xFant><enderEmit><xLgr>RUA ALEXANDRE BARRETO CAVALCANTE</xLgr><nro>64</nro><xBairro>ALTEROSA</xBairro><cMun>3154606</cMun><xMun>RIBEIRAO DAS NEVES</xMun><UF>MG</UF><CEP>33821105</CEP><cPais>1058</cPais><xPais>BRASIL</xPais><fone>3136269200</fone></enderEmit><IE>0629468770035</IE><CRT>3</CRT></emit><dest><CNPJ>11175063000103</CNPJ><xNome>GRACA ISABEL DE ARANTES REIS</xNome><enderDest><xLgr>RUA SEBASTIAO BRANDAO REIS</xLgr><nro>288</nro><xBairro>CENTRO</xBairro><cMun>3135902</cMun><xMun>JESUANIA</xMun><UF>MG</UF><CEP>37485000</CEP><cPais>1058</cPais><xPais>BRASIL</xPais><fone>3532731298</fone></enderDest><IE>0014223240030</IE></dest><entrega><CNPJ>11175063000103</CNPJ><xLgr>RUA SEBASTIAO BRANDAO REIS</xLgr><nro>288</nro><xBairro>CENTRO</xBairro><cMun>3135902</cMun><xMun>JESUANIA</xMun><UF>MG</UF></entrega><det nItem="1"><prod><cProd>5440</cProd><cEAN>7891035215001</cEAN><xProd>VEJA LIMP.PESADA 500ML TRADICIONAL</xProd><NCM>34022000</NCM><CFOP>5405</CFOP><uCom>UN</uCom><qCom>12.0000</qCom><vUnCom>3.5895000000</vUnCom><vProd>43.07</vProd><cEANTrib>7891035215001</cEANTrib><uTrib>UN</uTrib><qTrib>12.0000</qTrib><vUnTrib>3.5895000000</vUnTrib><vOutro>0.41</vOutro><indTot>1</indTot><xPed>67901697</xPed></prod><imposto><ICMS><ICMS60><orig>0</orig><CST>60</CST></ICMS60></ICMS><IPI><cEnq>999</cEnq><IPITrib><CST>99</CST><qUnid>12.0000</qUnid><vUnid>0.0000</vUnid><vIPI>0.00</vIPI></IPITrib></IPI><PIS><PISAliq><CST>01</CST><vBC>43.07</vBC><pPIS>1.65</pPIS><vPIS>0.71</vPIS></PISAliq></PIS><COFINS><COFINSAliq><CST>01</CST><vBC>43.07</vBC><pCOFINS>7.60</pCOFINS><vCOFINS>3.27</vCOFINS></COFINSAliq></COFINS></imposto></det><det nItem="2"><prod><cProd>9825</cProd><cEAN>7891035800214</cEAN><xProd>VEJA MULTIUSO 500ML TRADIC.L500P450</xProd><NCM>34022000</NCM><CFOP>5405</CFOP><uCom>UN</uCom><qCom>24.0000</qCom><vUnCom>2.3580000000</vUnCom><vProd>56.59</vProd><cEANTrib>7891035800214</cEANTrib><uTrib>UN</uTrib><qTrib>24.0000</qTrib><vUnTrib>2.3580000000</vUnTrib><vOutro>0.64</vOutro><indTot>1</indTot><xPed>67901697</xPed></prod><imposto><ICMS><ICMS60><orig>0</orig><CST>60</CST></ICMS60></ICMS><IPI><cEnq>999</cEnq><IPITrib><CST>99</CST><qUnid>24.0000</qUnid><vUnid>0.0000</vUnid><vIPI>0.00</vIPI></IPITrib></IPI><PIS><PISAliq><CST>01</CST><vBC>56.59</vBC><pPIS>1.65</pPIS><vPIS>0.93</vPIS></PISAliq></PIS><COFINS><COFINSAliq><CST>01</CST><vBC>56.59</vBC><pCOFINS>7.60</pCOFINS><vCOFINS>4.30</vCOFINS></COFINSAliq></COFINS></imposto></det><det nItem="3"><prod><cProd>6734</cProd><cEAN>7891035210334</cEAN><xProd>VEJA MULTIUSO 500ML LAVANDA</xProd><NCM>34022000</NCM><CFOP>5405</CFOP><uCom>UN</uCom><qCom>12.0000</qCom><vUnCom>2.4267000000</vUnCom><vProd>29.12</vProd><cEANTrib>7891035210334</cEANTrib><uTrib>UN</uTrib><qTrib>12.0000</qTrib><vUnTrib>2.4267000000</vUnTrib><vOutro>0.27</vOutro><indTot>1</indTot><xPed>67901697</xPed></prod><imposto><ICMS><ICMS60><orig>0</orig><CST>60</CST></ICMS60></ICMS><IPI><cEnq>999</cEnq><IPITrib><CST>99</CST><qUnid>12.0000</qUnid><vUnid>0.0000</vUnid><vIPI>0.00</vIPI></IPITrib></IPI><PIS><PISAliq><CST>01</CST><vBC>29.12</vBC><pPIS>1.65</pPIS><vPIS>0.48</vPIS></PISAliq></PIS><COFINS><COFINSAliq><CST>01</CST><vBC>29.12</vBC><pCOFINS>7.60</pCOFINS><vCOFINS>2.21</vCOFINS></COFINSAliq></COFINS></imposto></det><det nItem="4"><prod><cProd>5430</cProd><cEAN>7891035209000</cEAN><xProd>VEJA MULTIUSO 500ML CAMPESTRE</xProd><NCM>34022000</NCM><CFOP>5405</CFOP><uCom>UN</uCom><qCom>12.0000</qCom><vUnCom>2.4267000000</vUnCom><vProd>29.12</vProd><cEANTrib>7891035209000</cEANTrib><uTrib>UN</uTrib><qTrib>12.0000</qTrib><vUnTrib>2.4267000000</vUnTrib><vOutro>0.27</vOutro><indTot>1</indTot><xPed>67901697</xPed></prod><imposto><ICMS><ICMS60><orig>0</orig><CST>60</CST></ICMS60></ICMS><IPI><cEnq>999</cEnq><IPITrib><CST>99</CST><qUnid>12.0000</qUnid><vUnid>0.0000</vUnid><vIPI>0.00</vIPI></IPITrib></IPI><PIS><PISAliq><CST>01</CST><vBC>29.12</vBC><pPIS>1.65</pPIS><vPIS>0.48</vPIS></PISAliq></PIS><COFINS><COFINSAliq><CST>01</CST><vBC>29.12</vBC><pCOFINS>7.60</pCOFINS><vCOFINS>2.21</vCOFINS></COFINSAliq></COFINS></imposto></det><det nItem="5"><prod><cProd>5337</cProd><cEAN>7891035250002</cEAN><xProd>VEJA LIMP.PESADA 500ML CLORO</xProd><NCM>34022000</NCM><CFOP>5405</CFOP><uCom>UN</uCom><qCom>12.0000</qCom><vUnCom>3.5895000000</vUnCom><vProd>43.07</vProd><cEANTrib>7891035250002</cEANTrib><uTrib>UN</uTrib><qTrib>12.0000</qTrib><vUnTrib>3.5895000000</vUnTrib><vOutro>0.41</vOutro><indTot>1</indTot><xPed>67901697</xPed></prod><imposto><ICMS><ICMS60><orig>0</orig><CST>60</CST></ICMS60></ICMS><IPI><cEnq>999</cEnq><IPITrib><CST>99</CST><qUnid>12.0000</qUnid><vUnid>0.0000</vUnid><vIPI>0.00</vIPI></IPITrib></IPI><PIS><PISAliq><CST>01</CST><vBC>43.07</vBC><pPIS>1.65</pPIS><vPIS>0.71</vPIS></PISAliq></PIS><COFINS><COFINSAliq><CST>01</CST><vBC>43.07</vBC><pCOFINS>7.60</pCOFINS><vCOFINS>3.27</vCOFINS></COFINSAliq></COFINS></imposto></det><det nItem="6"><prod><cProd>8312</cProd><cEAN>7891035537974</cEAN><xProd>BOM AR AERO 360ML VIDA DOCE</xProd><NCM>33074900</NCM><CFOP>5405</CFOP><uCom>UN</uCom><qCom>6.0000</qCom><vUnCom>6.7115000000</vUnCom><vProd>40.27</vProd><cEANTrib>7891035537974</cEANTrib><uTrib>UN</uTrib><qTrib>6.0000</qTrib><vUnTrib>6.7115000000</vUnTrib><vOutro>0.38</vOutro><indTot>1</indTot><xPed>67901697</xPed></prod><imposto><ICMS><ICMS60><orig>0</orig><CST>60</CST></ICMS60></ICMS><IPI><cEnq>999</cEnq><IPITrib><CST>99</CST><qUnid>6.0000</qUnid><vUnid>0.0000</vUnid><vIPI>0.00</vIPI></IPITrib></IPI><PIS><PISNT><CST>07</CST></PISNT></PIS><COFINS><COFINSNT><CST>07</CST></COFINSNT></COFINS></imposto></det><det nItem="7"><prod><cProd>5473</cProd><cEAN>7891035500008</cEAN><xProd>LUSTRA MOV.POLIF.200ML JASMIM</xProd><NCM>34052000</NCM><CFOP>5405</CFOP><uCom>UN</uCom><qCom>6.0000</qCom><vUnCom>4.4988000000</vUnCom><vProd>26.99</vProd><cEANTrib>7891035500008</cEANTrib><uTrib>UN</uTrib><qTrib>6.0000</qTrib><vUnTrib>4.4988000000</vUnTrib><vOutro>0.25</vOutro><indTot>1</indTot><xPed>67901697</xPed></prod><imposto><ICMS><ICMS60><orig>0</orig><CST>60</CST></ICMS60></ICMS><IPI><cEnq>999</cEnq><IPITrib><CST>99</CST><qUnid>6.0000</qUnid><vUnid>0.0000</vUnid><vIPI>0.00</vIPI></IPITrib></IPI><PIS><PISAliq><CST>01</CST><vBC>26.99</vBC><pPIS>1.65</pPIS><vPIS>0.45</vPIS></PISAliq></PIS><COFINS><COFINSAliq><CST>01</CST><vBC>26.99</vBC><pCOFINS>7.60</pCOFINS><vCOFINS>2.05</vCOFINS></COFINSAliq></COFINS></imposto></det><det nItem="8"><prod><cProd>5476</cProd><cEAN>7891035502200</cEAN><xProd>LUSTRA MOV.POLIF.200ML LAVANDA</xProd><NCM>34052000</NCM><CFOP>5405</CFOP><uCom>UN</uCom><qCom>6.0000</qCom><vUnCom>4.4988000000</vUnCom><vProd>26.99</vProd><cEANTrib>7891035502200</cEANTrib><uTrib>UN</uTrib><qTrib>6.0000</qTrib><vUnTrib>4.4988000000</vUnTrib><vOutro>0.25</vOutro><indTot>1</indTot><xPed>67901697</xPed></prod><imposto><ICMS><ICMS60><orig>0</orig><CST>60</CST></ICMS60></ICMS><IPI><cEnq>999</cEnq><IPITrib><CST>99</CST><qUnid>6.0000</qUnid><vUnid>0.0000</vUnid><vIPI>0.00</vIPI></IPITrib></IPI><PIS><PISAliq><CST>01</CST><vBC>26.99</vBC><pPIS>1.65</pPIS><vPIS>0.45</vPIS></PISAliq></PIS><COFINS><COFINSAliq><CST>01</CST><vBC>26.99</vBC><pCOFINS>7.60</pCOFINS><vCOFINS>2.05</vCOFINS></COFINSAliq></COFINS></imposto></det><det nItem="9"><prod><cProd>5399</cProd><cEAN>7891035017001</cEAN><xProd>VANISH RESOLV 500ML</xProd><NCM>34022000</NCM><CFOP>5405</CFOP><uCom>UN</uCom><qCom>6.0000</qCom><vUnCom>6.3848000000</vUnCom><vProd>38.31</vProd><cEANTrib>7891035017001</cEANTrib><uTrib>UN</uTrib><qTrib>6.0000</qTrib><vUnTrib>6.3848000000</vUnTrib><vOutro>0.36</vOutro><indTot>1</indTot><xPed>67901697</xPed></prod><imposto><ICMS><ICMS60><orig>0</orig><CST>60</CST></ICMS60></ICMS><IPI><cEnq>999</cEnq><IPITrib><CST>99</CST><qUnid>6.0000</qUnid><vUnid>0.0000</vUnid><vIPI>0.00</vIPI></IPITrib></IPI><PIS><PISAliq><CST>01</CST><vBC>38.31</vBC><pPIS>1.65</pPIS><vPIS>0.63</vPIS></PISAliq></PIS><COFINS><COFINSAliq><CST>01</CST><vBC>38.31</vBC><pCOFINS>7.60</pCOFINS><vCOFINS>2.91</vCOFINS></COFINSAliq></COFINS></imposto></det><det nItem="10"><prod><cProd>6625</cProd><cEAN>7891035024924</cEAN><xProd>SBP AERO M.INSET.300ML CITRONELA</xProd><NCM>38089119</NCM><CFOP>5405</CFOP><uCom>UN</uCom><qCom>8.0000</qCom><vUnCom>6.3767000000</vUnCom><vProd>51.01</vProd><cEANTrib>7891035024924</cEANTrib><uTrib>UN</uTrib><qTrib>8.0000</qTrib><vUnTrib>6.3767000000</vUnTrib><vOutro>0.48</vOutro><indTot>1</indTot><xPed>67901697</xPed></prod><imposto><ICMS><ICMS60><orig>0</orig><CST>60</CST></ICMS60></ICMS><IPI><cEnq>999</cEnq><IPITrib><CST>99</CST><qUnid>8.0000</qUnid><vUnid>0.0000</vUnid><vIPI>0.00</vIPI></IPITrib></IPI><PIS><PISAliq><CST>01</CST><vBC>51.01</vBC><pPIS>1.65</pPIS><vPIS>0.84</vPIS></PISAliq></PIS><COFINS><COFINSAliq><CST>01</CST><vBC>51.01</vBC><pCOFINS>7.60</pCOFINS><vCOFINS>3.88</vCOFINS></COFINSAliq></COFINS></imposto></det><det nItem="11"><prod><cProd>6939</cProd><cEAN>7891035024986</cEAN><xProd>SBP AERO M.INSET.300ML EUCALIPTO</xProd><NCM>38089119</NCM><CFOP>5405</CFOP><uCom>UN</uCom><qCom>8.0000</qCom><vUnCom>6.3767000000</vUnCom><vProd>51.01</vProd><cEANTrib>7891035024986</cEANTrib><uTrib>UN</uTrib><qTrib>8.0000</qTrib><vUnTrib>6.3767000000</vUnTrib><vOutro>0.48</vOutro><indTot>1</indTot><xPed>67901697</xPed></prod><imposto><ICMS><ICMS60><orig>0</orig><CST>60</CST></ICMS60></ICMS><IPI><cEnq>999</cEnq><IPITrib><CST>99</CST><qUnid>8.0000</qUnid><vUnid>0.0000</vUnid><vIPI>0.00</vIPI></IPITrib></IPI><PIS><PISAliq><CST>01</CST><vBC>51.01</vBC><pPIS>1.65</pPIS><vPIS>0.84</vPIS></PISAliq></PIS><COFINS><COFINSAliq><CST>01</CST><vBC>51.01</vBC><pCOFINS>7.60</pCOFINS><vCOFINS>3.88</vCOFINS></COFINSAliq></COFINS></imposto></det><det nItem="12"><prod><cProd>312</cProd><cEAN>7891035612060</cEAN><xProd>MORTEIN RODOX M.BARATA 300ML</xProd><NCM>38089119</NCM><CFOP>5405</CFOP><uCom>UN</uCom><qCom>6.0000</qCom><vUnCom>7.8293000000</vUnCom><vProd>46.98</vProd><cEANTrib>7891035612060</cEANTrib><uTrib>UN</uTrib><qTrib>6.0000</qTrib><vUnTrib>7.8293000000</vUnTrib><vOutro>0.44</vOutro><indTot>1</indTot><xPed>67901697</xPed></prod><imposto><ICMS><ICMS60><orig>0</orig><CST>60</CST></ICMS60></ICMS><IPI><cEnq>999</cEnq><IPITrib><CST>99</CST><qUnid>6.0000</qUnid><vUnid>0.0000</vUnid><vIPI>0.00</vIPI></IPITrib></IPI><PIS><PISAliq><CST>01</CST><vBC>46.98</vBC><pPIS>1.65</pPIS><vPIS>0.78</vPIS></PISAliq></PIS><COFINS><COFINSAliq><CST>01</CST><vBC>46.98</vBC><pCOFINS>7.60</pCOFINS><vCOFINS>3.57</vCOFINS></COFINSAliq></COFINS></imposto></det><det nItem="13"><prod><cProd>7399</cProd><cEAN>17896016603348</cEAN><xProd>AGUA COCO DUCOCO 27X200ML TP</xProd><NCM>20098990</NCM><CFOP>5405</CFOP><uCom>CX</uCom><qCom>1.0000</qCom><vUnCom>37.2340000000</vUnCom><vProd>37.23</vProd><cEANTrib>17896016603348</cEANTrib><uTrib>CX</uTrib><qTrib>1.0000</qTrib><vUnTrib>37.2340000000</vUnTrib><vOutro>0.35</vOutro><indTot>1</indTot><xPed>67901697</xPed></prod><imposto><ICMS><ICMS60><orig>0</orig><CST>60</CST></ICMS60></ICMS><IPI><cEnq>999</cEnq><IPITrib><CST>99</CST><qUnid>1.0000</qUnid><vUnid>0.0000</vUnid><vIPI>0.00</vIPI></IPITrib></IPI><PIS><PISAliq><CST>01</CST><vBC>37.23</vBC><pPIS>1.65</pPIS><vPIS>0.61</vPIS></PISAliq></PIS><COFINS><COFINSAliq><CST>01</CST><vBC>37.23</vBC><pCOFINS>7.60</pCOFINS><vCOFINS>2.83</vCOFINS></COFINSAliq></COFINS></imposto></det><det nItem="14"><prod><cProd>9508</cProd><cEAN>7890704806441</cEAN><xProd>SAB.NIVEA 90GR ERVA DOCE</xProd><NCM>34011190</NCM><EXTIPI>01</EXTIPI><CFOP>5405</CFOP><uCom>UN</uCom><qCom>48.0000</qCom><vUnCom>0.8899000000</vUnCom><vProd>42.72</vProd><cEANTrib>7890704806441</cEANTrib><uTrib>UN</uTrib><qTrib>48.0000</qTrib><vUnTrib>0.8899000000</vUnTrib><vOutro>0.40</vOutro><indTot>1</indTot><xPed>67901697</xPed></prod><imposto><ICMS><ICMS60><orig>0</orig><CST>60</CST></ICMS60></ICMS><IPI><cEnq>999</cEnq><IPITrib><CST>99</CST><qUnid>48.0000</qUnid><vUnid>0.0000</vUnid><vIPI>0.00</vIPI></IPITrib></IPI><PIS><PISNT><CST>07</CST></PISNT></PIS><COFINS><COFINSNT><CST>07</CST></COFINSNT></COFINS></imposto></det><det nItem="15"><prod><cProd>9475</cProd><cEAN>4005900036728</cEAN><xProd>DESOD.NIVEA AERO 150ML INVBL-WT.PWR</xProd><NCM>33072010</NCM><CFOP>5405</CFOP><uCom>UN</uCom><qCom>6.0000</qCom><vUnCom>8.2015000000</vUnCom><vProd>49.21</vProd><cEANTrib>4005900036728</cEANTrib><uTrib>UN</uTrib><qTrib>6.0000</qTrib><vUnTrib>8.2015000000</vUnTrib><vOutro>0.47</vOutro><indTot>1</indTot><xPed>67901697</xPed></prod><imposto><ICMS><ICMS60><orig>0</orig><CST>60</CST></ICMS60></ICMS><IPI><cEnq>999</cEnq><IPITrib><CST>99</CST><qUnid>6.0000</qUnid><vUnid>0.0000</vUnid><vIPI>0.00</vIPI></IPITrib></IPI><PIS><PISNT><CST>07</CST></PISNT></PIS><COFINS><COFINSNT><CST>07</CST></COFINSNT></COFINS></imposto></det><det nItem="16"><prod><cProd>9473</cProd><cEAN>4005900036667</cEAN><xProd>DESOD.NIVEA AERO 150ML INVBL-WT.CLR</xProd><NCM>33072010</NCM><CFOP>5405</CFOP><uCom>UN</uCom><qCom>6.0000</qCom><vUnCom>8.2015000000</vUnCom><vProd>49.21</vProd><cEANTrib>4005900036667</cEANTrib><uTrib>UN</uTrib><qTrib>6.0000</qTrib><vUnTrib>8.2015000000</vUnTrib><vOutro>0.47</vOutro><indTot>1</indTot><xPed>67901697</xPed></prod><imposto><ICMS><ICMS60><orig>0</orig><CST>60</CST></ICMS60></ICMS><IPI><cEnq>999</cEnq><IPITrib><CST>99</CST><qUnid>6.0000</qUnid><vUnid>0.0000</vUnid><vIPI>0.00</vIPI></IPITrib></IPI><PIS><PISNT><CST>07</CST></PISNT></PIS><COFINS><COFINSNT><CST>07</CST></COFINSNT></COFINS></imposto></det><det nItem="17"><prod><cProd>9474</cProd><cEAN>4005900036704</cEAN><xProd>DESOD.NIVEA ROLL-0N 50ML INVBLC-WHT.CLR</xProd><NCM>33072010</NCM><CFOP>5405</CFOP><uCom>UN</uCom><qCom>6.0000</qCom><vUnCom>4.7516000000</vUnCom><vProd>28.51</vProd><cEANTrib>4005900036704</cEANTrib><uTrib>UN</uTrib><qTrib>6.0000</qTrib><vUnTrib>4.7516000000</vUnTrib><vOutro>0.27</vOutro><indTot>1</indTot><xPed>67901697</xPed></prod><imposto><ICMS><ICMS60><orig>0</orig><CST>60</CST></ICMS60></ICMS><IPI><cEnq>999</cEnq><IPITrib><CST>99</CST><qUnid>6.0000</qUnid><vUnid>0.0000</vUnid><vIPI>0.00</vIPI></IPITrib></IPI><PIS><PISNT><CST>07</CST></PISNT></PIS><COFINS><COFINSNT><CST>07</CST></COFINSNT></COFINS></imposto></det><det nItem="18"><prod><cProd>9476</cProd><cEAN>4005900036759</cEAN><xProd>DESOD.NIVEA ROLL-0N 50ML INVBLC-WHT.PWR</xProd><NCM>33072010</NCM><CFOP>5405</CFOP><uCom>UN</uCom><qCom>6.0000</qCom><vUnCom>4.7516000000</vUnCom><vProd>28.51</vProd><cEANTrib>4005900036759</cEANTrib><uTrib>UN</uTrib><qTrib>6.0000</qTrib><vUnTrib>4.7516000000</vUnTrib><vOutro>0.27</vOutro><indTot>1</indTot><xPed>67901697</xPed></prod><imposto><ICMS><ICMS60><orig>0</orig><CST>60</CST></ICMS60></ICMS><IPI><cEnq>999</cEnq><IPITrib><CST>99</CST><qUnid>6.0000</qUnid><vUnid>0.0000</vUnid><vIPI>0.00</vIPI></IPITrib></IPI><PIS><PISNT><CST>07</CST></PISNT></PIS><COFINS><COFINSNT><CST>07</CST></COFINSNT></COFINS></imposto></det><total><ICMSTot><vBC>0.00</vBC><vICMS>0.00</vICMS><vBCST>0.00</vBCST><vST>0.00</vST><vProd>717.92</vProd><vFrete>0.00</vFrete><vSeg>0.00</vSeg><vDesc>0.00</vDesc><vII>0.00</vII><vIPI>0.00</vIPI><vPIS>7.91</vPIS><vCOFINS>36.43</vCOFINS><vOutro>6.87</vOutro><vNF>724.79</vNF></ICMSTot></total><transp><modFrete>0</modFrete><transporta><CNPJ>21110956000205</CNPJ><xNome>COOPTRANSLOG COOP. DE TRANSP. LOG. E DIST. ROD. DE CARGAS</xNome><xEnder>R. MARIA JOSE CARDOSO, 195 - CENTRO</xEnder><xMun>SARZEDO</xMun><UF>MG</UF></transporta><veicTransp><placa>KAZ2606</placa><UF>MG</UF></veicTransp><vol><qVol>8</qVol><pesoL>66.879</pesoL><pesoB>68.665</pesoB></vol></transp><cobr><dup><nDup>486940 - 1</nDup><dVenc>2015-02-24</dVenc><vDup>241.61</vDup></dup><dup><nDup>486940 - 2</nDup><dVenc>2015-03-03</dVenc><vDup>241.59</vDup></dup><dup><nDup>486940 - 3</nDup><dVenc>2015-03-10</dVenc><vDup>241.59</vDup></dup></cobr><infAdic><infCpl>ST JA RETIDO ART. 37 INC. II PART. I DO ANEXO XV ST JA RETIDO ART. 37 INC. II PART. I DO ANEXO XV - ; FAVOR CONFERIR MERCADORIA NO ATO DA ENTREGA. NAO ACEITAREMOS RECLAMACOES POSTERIORES. PRAZO DE VALIDADE 8 (OITO) DIAS. REGIME ESPECIAL/PTA NR. 16.000423503-41-SEF/MG; COD.VENDEDOR: 67 VENDEDOR: ROBERSON E LAGE REP. ME-67 ROTA: 5; FORMA PAGAMENTO: BANCO DO BRASIL - COB.BANCARIA - 03/14-21-28; TRANSACAO: 1223515; BASE ST: 805,37 ICMS ST: 90,15; NUM.PEDIDO: 67901697 NUM. CARGA: 21690 NUM. BOX: 9</infCpl></infAdic></infNFe><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/><Reference URI="#NFe31150201492857000139550010004869401111010024"><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><DigestValue>X2PFqV9jkJyX20LV3Yh3bIcSOwA=</DigestValue></Reference></SignedInfo><SignatureValue>X2PFqV9jkJyX20LV3Yh3bIcSOwA=</SignatureValue><KeyInfo><X509Data><X509Certificate>X2PFqV9jkJyX20LV3Yh3bIcSOwA=</X509Certificate></X509Data></KeyInfo></Signature></NFe><protNFe versao="2.00"><infProt><tpAmb>1</tpAmb><verAplic>2.0</verAplic><chNFe>31150201492857000139550010004869401111010024</chNFe><dhRecbto>2015-02-10T14:11:10</dhRecbto><nProt>131151670420064</nProt><digVal>X2PFqV9jkJyX20LV3Yh3bIcSOwA=</digVal><cStat>100</cStat><xMotivo>Autorizado o uso da NF-e</xMotivo></infProt></protNFe></nfeProc>';

    //Um Exemplo com String
    $domXml = simplexml_load_string($textoXml);

    $nCh = $domXml->NFe->infNFe["Id"];

    echo $nCh;

Como pegar o nome de um ID com PHP


When querying with query_string what does fuzzy number or fuzzy AUTO means?

Question: I read the documentation of
(https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html)
and still don't understand the following example:
GET /_search
{
  "query": {
    "bool": {
        "must": [{
                  "query_string": {
                      "query": "1~central OR 0~park",
                      "default_field": "content"
                   }},
                 {"query_string": {
                      "query": "park~AUTO",
                      "quote_field_suffix": ".exact",
                      "fields": ["content"]
                    }}]

}}}

In the first query_string:
I'm not sure I understand what is the meaning of 1~  ?
I read about Damerau–Levenshtein distance, and still not sure I understand it correcly:
1.1 what it the meaning of the number before ~ ? (1~, 0~, 2~)...?
1.2 if the index contains: Central or cntrl or center or  Central, does the query finds this results with "1~central"?

In the second query_string
what is the meaing of AUTO ? (park~AUTO)
Answer: To apply fuzzy search along with query_string, you need to replace "query": "1~central OR 0~park" with "query": "central~1 OR park~0".
The search term will be at first and then you can use fuzzy operator after that (~), to implement fuzziness.
Refer to this part of documentation

The query string and the fuzziness parameter use the Damerau-Levenshtein distance to find the terms.
cntrl~1 means that the search terms will match the original document containing central, only if the edit distance equals 1.
Edit distance here means that the search term will match the original term, either by adding, deleting, or transposing the characters once, i.e. the original term should be restored in 1 step.
For Example:
The original term is central
cntrl -> centrl -> central (2 steps, so this will not match with (~1))
centrl -> central (1 step so this will match with (~1))
And in the case of AUTO, the following rule is applied

Generates an edit distance based on the length of the term. Low and high distance arguments may be optionally provided AUTO:[low],[high]. If not specified, the default values are 3 and 6, equivalent to AUTO:3,6 that make for lengths:
0..2 Must match exactly

3..5 One edit allowed

5 Two edits allowed
Comment: Thaknks, just to be sure:
1. "park~AUTO" means between one or two distances ?
2. "quote_field_suffix": ".exact" means any changes ?


libdovecot-sieve.so.0 undefined symbol: i_debug

Question: After upgrading dovecot from 1.2 to 2.1.7 (while upgrading squeeze to wheezy) sieve no longer does it's job. (And breaks mail delivery)
apt-purging all dovecot packages and reinstalling did not improve the situation, i still get the same error message:
==> mail.err <==
Mar 14 13:40:14 xxx dovecot: deliver(email@example.com): dlopen(/usr/lib/dovecot/modules//lib90_sieve_plugin.so) failed: /usr/lib/dovecot/libdovecot-sieve.so.0: undefined symbol: i_debug
Mar 14 13:40:14 xxx dovecot: deliver(firstname.lastname@example.com): Fatal: Couldn't load required plugins

==> mail.info <==
Mar 14 13:40:14 xxx postfix/pipe[15828]: 13B1F19E0792: to=<email@example.com>, orig_to=<email@example.com>, relay=dovecot, delay=0.43, delays=0.32/0.01/0/0.09, dsn=4.3.0, status=deferred (temporary failure)

dovecot.conf:
protocols = imap lmtp sieve

mail_plugin_dir = /usr/lib/dovecot/modules/

[snip]
...
[/snip]

protocol lda {
  mail_plugins = $mail_plugins sieve
  #mail_plugins = sieve
}

protocol lmtp {
  mail_plugins = $mail_plugins sieve
}

plugin {
  #recipient_delimiter = +
  sieve = ~/.dovecot.sieve
  sieve_dir = ~/sieve
}

ll /usr/lib/dovecot/libdovecot-siev*
lrwxrwxrwx 1 root root      25 Feb  5  2013 libdovecot-sieve.so -> libdovecot-sieve.so.0.0.0
lrwxrwxrwx 1 root root      25 Feb  5  2013 libdovecot-sieve.so.0 -> libdovecot-sieve.so.0.0.0
-rw-r--r-- 1 root root  540304 Feb  5  2013 libdovecot-sieve.so.0.0.0

ll /usr/lib/dovecot/modules/*sieve*
-rw-r--r-- 1 root root 18392 Feb  5  2013 /usr/lib/dovecot/modules/lib90_sieve_plugin.so

Answer: problem solved:
in postfix mails were piped to dovecot's deliver istead of lmtp
deleting the pipe in /etc/postfix/master.cf,
dovecot   unix  -       n       n       -       -       pipe
 flags=DORhu user=nobody argv=/usr/local/lib/dovecot/deliver -f ${sender}
 -d ${user}@${nexthop} -n -m ${extension}

and adding a virtual trasport to /etc/postfix/main.cf,
virtual_transport = lmtp:unix:private/dovecot-lmtp

or
virtual_transport = lmtp:unix:/var/run/dovecot/lmtp

fixed the issue for me


how to go about scaling a web-application?

Question: I am primarily a web-application developer, and I do not know much about scaling/scalability techniques.  My application is written in Python, using Django; a fairly standard setup.
I currently use Apache 2.2 for my webserver, and MySQL for my database server; both running on the same VPS.
Up until now, it was basically a prototype and merely 15-30 concurrent users at any given time; so I had no issues, but now since we'll be adding more users we'll have performance issues.
So my question is how do I go about scaling my web-application?  My current plan is as follows:

Now I have just one vps server running, apache + MySQL.
Next, I plan to add another vps server, to run only MySQL, so I'll have one webserver and one DB server.
Next, I'll add memcache to the webserver for caching data, to take some load off MySQL.
Next, another web-server for serving all the static content.
Next, a VPS server for load-balancing (nginx/varnish) behind which would be my two web-servers and then db-server.

Does that sound like a workable strategy?  Please guide me around here.
Answer: Do you know where your first bottleneck is? If not, how did you laid out the order of things to do?
That said, if you haven't done anything terribly wrong in your app the first limit you'll probably hit will be disk I/O caused by the db and your strategy will probably be a good choice.
Moving the db to another physical disk should help a lot and be your first thing to do. As an example, depending on the systems you're using there could be no difference or a big difference between using a second disk on the current host or moving to an entirely separated server. You're running on VPSes, if you're disk I/O bound moving to a second VPS won't probably help much if it happens to use the same storage (same disk or same SAN or whatever) - but this last one is an issue that should be addressed by your vps provider.
Comment: are there any real projects case-studies, or guides that could be referred for this ?
Answer: I'd recommend reading Scalable Internet Architectures by Theo Schlossnagle.  The book describes all of the theory and practice of scaling applications between servers, ensuring no single points of failure, scaling databases, etc.
Your plan does sound like the first progression of scaling though.  Usually everything starts on one server, then you split web and database, then add a reverse proxy or load balancer and run multiple web servers, and so on.
Answer: You can't improve what you don't measure. First you should see what your bottleneck is. You can use atop now, and set up some kind of monitoring if you haven't already. If everything is running well, you can generate realistic load using JMeter.
Here is some more perspective on the infrastructure to build around your Django app.


Sintaxe de inicialização de propriedade estranha pra mim

Question: Ao ler um tutorial sobre Entity Framework, me deparei com um exemplo de código onde existia uma linha que, para mim, é desconhecido:
Student stud = new Student() { StudentName = "New Student" };

Eu entendo que está sendo instanciado um novo objeto do tipo Student, mas as instruções entre chaves são estranhas para mim. O que é isso? Por acaso uma segunda forma que C# dispõe para inicializar uma propriedade do objeto?
Nesse caso eu sou familiarizado com a forma trivial, ou seja, através do construtor.
Student stud = new Student(StudentName = "New Student");

Comment: A sintaxe para construtores com argumentos nomeados é `var stud = new Student(studentName: "New Student");`.
Comment: Matheus, lhe aconselho a dar uma lida nas novidades do c# 6.0. https://github.com/dotnet/roslyn/wiki/New-Language-Features-in-C%23-6
Answer: Inicializador de objeto
Isso é um object initializer. É uma forma de iniciar os membros de um objeto independente de ter um construtor.
Ele funciona de forma análoga ao construtor, mas pode inicializar qualquer membro público (não pode acessar membros privados, a não ser ser por forma indireta com um método público, exatamente como ocorre com o construtor).
Tem basicamente as mesmas características de um construtor, mas a ordem de inicialização não é garantida (depende de como o programador usar na criação do objeto) ao contrário do construtor que determina a exata ordem de inicialização, e pode ainda executar operações auxiliares durante a inicialização.
Entenda para que serve um construtor.
Veja um exemplo prático.
Na verdade a sintaxe poderia ser até mais simples:
var stud = new Student { StudentName = "New Student" };

Isso é o mesmo que fazer:
var stud = new Student();
stud.StudentName = "New Student";

Mas com a vantagem que o objeto só estará disponível para a aplicação ao final da execução das duas linhas. Escrito de forma separada um programador pode pôr alguma coisa no meio dessas linhas em futuras versões e parar de fazer o que se se esperava.
Note que StudentName é uma propriedade pública da classe (ou um campo público, o que é raro que seja).
Nada garante que todos os membros necessários serão inicializados adequadamente usando essa forma. O construtor é melhor quando isso é importante.
Conforme pode observar na documentação a mesma sintaxe é possível com a inicialização de coleções.
Construtor com argumentos nomeados
Já a segunda sintaxe é um construtor como outro qualquer, mas está usando um argumento nomeado. Por coincidência o parâmetro tem o mesmo nome da propriedade, mas não se engane, ali é o nome do parâmetro, e não da propriedade. O mais adequado de acordo com o estilo normalmente adotado em C#  (e consertando o erro de sintaxe observado pelo Thiago Lunardi em comentário - veja mais abaixo que pode ser que a sintaxe possa estar correta) seria:
var stud = new Student(studentName : "New Student");

Essa sintaxe pode ajudar dar melhor semântica à construção do objeto. Aparentemente neste caso não há maior vantagem. Este uso é mais vantajoso quando o método tem vários parâmetros e melhor ainda quando alguns possuem valores padrão. Assim é possível usar os argumentos na ordem que quiser e fica mais fácil omitir os que já possuem valores.
Essa sintaxe é totalmente dependente da assinatura do construtor.
Diferença entre parâmetro e argumento.
Note que a sintaxe pode estar certa. É ruim, é confuso, mas poderia estar fazendo uma atribuição de "New Student" para uma variável chamada StudentName  e usando o valor dessa variável como argumento do construtor.
Veja funcionando no ideone. E no .NET Fiddle. Também coloquei no GitHub para referência futura.
Muito disto pode ser evitado com os campos, ou até mesmo as propriedades já inicializadas na classe.
Importante observar que C# 9 apresentou novidades no assunto e construtores serão um pouco menos usados em certos cenários.
Comment: @ThiagoLunardi é verdade, copiei o dele e nem me atentei a este erro, obrigado. Se quiser corrigir... Se não, eu faço jájá.
Comment: A sintaxe para construtores com argumentos nomeados é `var stud = new Student(studentName: "New Student");`.
Comment: Não consigo corrigir, pois exige alterar no mínimo 6 caracteres, e aí é apenas 2. :)


How to write PHP Syntax in Smarty?

Question: I want to know how to write php syntax in smarty template(.tpl).
For example I'm using below php syntax in Pure Codeigniter(No Smarty include) and it's working perfectly.
<code><?= isset($value) ? $value['phone'] : '' ?>
</code>
But in Smarty, It's not work. How should write this? Please suggest me.
Answer: Try this:
<code>{if isset($value)}
    $value['phone']
{/if}
</code>
Comment: I think second method should be work. But i don't understand what is $title? Can you explain me?
Answer: years ago I used:
<code>{php}
// php code
{/php}
</code>
Nowadays I don't know if it still works
Comment: Thanks alot bro. But In smarty 3 It's not working. I already tested it. Anyway thanks u for your answer. For now I can do it as #Arkadiusz G Said.

{if isset($value)}
    $value['phone']
{/if}

This condition is working for me now.
Comment: maybe this can help: http://stackoverflow.com/a/30262065/454827 @KyawZinWai

How to write PHP Syntax in Smarty?


Is there a way to store secrets which are more than 25KB in Azure Key Vault?

Question: I currently have a json object which i am converting into a string and trying to store in Azure Key Vault. But the size is around 60kb. Is there a way to store this on Key Vault because i read that the size limit is 25lkb.
Comment: You have a 60kb encryption key as a json object?
Comment: JSON compresses a lot. You could store the JSON key compressed in Key Vault provided it compresses to less than 25 KB. However, that is not recommended. Encrypt the object with Key Vault and store in a blob. Key Vault is not meant for storing large secrets.
Answer: You may want to look at Azure Blob Client Side Encryption.
Essentially it encrypts content before storing it in Blob Storage and then it protects the key using Key Vault.
Most of the Blob Storage client libraries have built -in support, making it transparent to you.
In a nutshell, you can store your large secret encrypted in Blob Storage, automatically protected by Key Vault.
In practice, this is what happens inside the blob storage client;

A random symmetric encryption key is created.
Your data is encrypted on your machine using that key.
The encryption key is encrypted using a Public Key provided by KeyVault.
The encrypted key is stored in blob storage along with your data data.

When you want to retrieve the data, the storage library will ask Key Vault to decrypt the key and will decrypt the data for you.
This all happens transparently to you. You do need to switch this on, of course. How you do that depends on which storage client you use, so just search for Blob Client Side Encryption and your chosen programming language.
Comment: Thanks. This helps solve my problem. I was thinking of Blob Storage but did't know that it could be encrypted.
Answer: I am sorry that Key Vault stores and manages secrets as sequences of octets (8-bit bytes), with a maximum size of 25k bytes each. So, it is impossible to directly store a secret with more than 25k bytes into Key Vault.
Usually, a secret may not be that large. You might only want to store a secret json document.  If so, I suggest you change your security pattern. You may:

Generate a random secret.
Use that secret to encrypt your json string, and then store the encrypted string to Azure Storage.
Store the secret into Key Vault.
Comment: I am storing a json and it is a secret but it's size is bigger than 25kb. @Frans answer was what i was looking for. Thanks.


Understanding @weakify macro

Question: How does @weakify work behind the scene? The idea of using @weakify(self) is to have it serve as a shorthand to this:
__weak __typeof__(self) weakSelf = self;

Note: @weakify macro is defined here.
I tried to understand how it works by collecting all the macro that it uses:
#define weakify(...) \
            ext_keywordify \
            metamacro_foreach_cxt(ext_weakify_,, __weak, __VA_ARGS__)

#define ext_weakify_(INDEX, CONTEXT, VAR) \
    CONTEXT __typeof__(VAR) metamacro_concat(VAR, _weak_) = (VAR);

#define metamacro_foreach_cxt(MACRO, SEP, CONTEXT, ...) \
        metamacro_concat(metamacro_foreach_cxt, metamacro_argcount(__VA_ARGS__))(MACRO, SEP, CONTEXT, __VA_ARGS__)

#define metamacro_argcount(...) \
        metamacro_at(20, __VA_ARGS__, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)

#define metamacro_concat(A, B) \
        metamacro_concat_(A, B)

#define metamacro_concat_(A, B) A ## B

#define metamacro_foreach_cxt1(MACRO, SEP, CONTEXT, _0) MACRO(0, CONTEXT, _0)

#define metamacro_at(N, ...) \
        metamacro_concat(metamacro_at, N)(__VA_ARGS__)

#define metamacro_head(...) \
        metamacro_head_(__VA_ARGS__, 0)

#define metamacro_head_(FIRST, ...) FIRST

#define metamacro_at0(...) metamacro_head(__VA_ARGS__)
#define metamacro_at1(_0, ...) metamacro_head(__VA_ARGS__)
#define metamacro_at2(_0, _1, ...) metamacro_head(__VA_ARGS__)
#define metamacro_at3(_0, _1, _2, ...) metamacro_head(__VA_ARGS__)
#define metamacro_at4(_0, _1, _2, _3, ...) metamacro_head(__VA_ARGS__)
#define metamacro_at5(_0, _1, _2, _3, _4, ...) metamacro_head(__VA_ARGS__)
#define metamacro_at6(_0, _1, _2, _3, _4, _5, ...) metamacro_head(__VA_ARGS__)
#define metamacro_at7(_0, _1, _2, _3, _4, _5, _6, ...) metamacro_head(__VA_ARGS__)
#define metamacro_at8(_0, _1, _2, _3, _4, _5, _6, _7, ...) metamacro_head(__VA_ARGS__)
#define metamacro_at9(_0, _1, _2, _3, _4, _5, _6, _7, _8, ...) metamacro_head(__VA_ARGS__)
#define metamacro_at10(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, ...) metamacro_head(__VA_ARGS__)
#define metamacro_at11(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, ...) metamacro_head(__VA_ARGS__)
#define metamacro_at12(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, ...) metamacro_head(__VA_ARGS__)
#define metamacro_at13(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, ...) metamacro_head(__VA_ARGS__)
#define metamacro_at14(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, ...) metamacro_head(__VA_ARGS__)
#define metamacro_at15(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, ...) metamacro_head(__VA_ARGS__)
#define metamacro_at16(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, ...) metamacro_head(__VA_ARGS__)
#define metamacro_at17(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, ...) metamacro_head(__VA_ARGS__)
#define metamacro_at18(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, ...) metamacro_head(__VA_ARGS__)
#define metamacro_at19(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, ...) metamacro_head(__VA_ARGS__)
#define metamacro_at20(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, ...) metamacro_head(__VA_ARGS__)

#if DEBUG
#define ext_keywordify autoreleasepool {}
#else
#define ext_keywordify try {} @catch (...) {}
#endif

I put the entire code above along with below into a .c file:
@weakify(self)

and compile it using gcc -E test.c.
The output I get is:
@try {} @catch (...) {} __attribute__((objc_gc(weak))) __typeof__(self) self_weak_ = (self);

Question:
Given that the generated output from the macro is self_weak_.  In normal code using @weakify(self), self is still directly referenced after weakify() call, how does the use of self turn into a weak self given that the code not using self_weak_?
For example, I see this often:
 @weakify(self)
 [[self.obj doSomething];

How does self.obj use weak self?  Shouldn't the code be:
 @weakify(self)
 [[self_weak_.obj doSomething];

Comment: Compare http://stackoverflow.com/questions/18599174/how-can-i-use-commercial-at-sign-in-objective-c-macro or http://stackoverflow.com/questions/20861922/meaning-of-objective-c-macros-prefixed-with-an-at-symbol. It is a "trick" to define a macro in such a way that the user *thinks* the macro name starts with @.
Comment: Look at the bottom of the page you linked for what `ext_keywordify` is.
Comment: Thanks @rmaddy - missed that.  Will re-run things.
Comment: Thanks for the links @MartinR.  I reformatted my question.
Answer: If you dump the clang predefined macros with
clang -dM -E -x c /dev/null

then you'll find
#define __weak __attribute__((objc_gc(weak)))

So if you write __weak in your source this will be expanded to
the clang attribute objc_gc(weak). In other words,
@try {} @catch (...) {} __attribute__((objc_gc(weak))) __typeof__(self) self_weak_ = (self);

is equivalent to
@try {} @catch (...) {} __weak __typeof__(self) self_weak_ = (self);

Now @try {} @catch (...) {} is a no-op (a trick to define a
macro that appears to start with an @ character, compare How can I use commercial at sign in Objective-C macro?),
so what is left is
__weak __typeof__(self) self_weak_ = (self);

which is standard to define and initialize a weak variable self_weak_ pointing the same object that self points to.
@weakify is meant to be used with its counterpart @strongify,
for example:
@weakify(self);
// Expands to:
// __weak __typeof__(self) self_weak_ = (self);

void (^someClosure)(void) = ^void () {

    @strongify(self);
    // Expands to:
    // __strong __typeof__(self) self = (self_weak_);

    if (self) {
        [self doSomething];
        [self doSomethingElse];
    }
};

Inside the closure, self is a local variable and initialized as
a strong reference to the object if that object still exists.
If the object has been deallocated in the meantime (because no strong
references to it exist anymore), self_weak_ is nil and the local variable
self is also nil.
Comment: Thanks.  Question is usually code using weakify continues to refer to self.  How does the use of weakify make self point to weak self?
Comment: @Boon: Sorry, I don't get it. `self_weak_` is initialized to `self`, so `self_weak_` is a weak reference to the same object that `self` points to.
Comment: Sorry for the confusion - let me include an example.
Comment: Added example towards the end of the question.
Comment: @Boon: In your example, `[[self.obj doSomething];` does *not* refer to the weak pointer. But note that there is another macro `@strongify`, and *that* creates strong local variables with the same name as the original, in your case `self`.
Comment: In that case I don't see how weakify(self) is useful.  Because strongify is just taking self and make it a strong ref, but self is already a strong ref, no?
Comment: @Boon: The use of the weak reference is (for example) to prevent retain cycles. If the closure is executed (perhaps at some later time) and the object that the weak reference points to has been deallocated in the meantime then self_weak_ is nil (and the local self variable will be nil as well).
Comment: @MartinR: When you pass `self` into `@strongify` inside the closure, doesn't the closure capture it?
Comment: @MikeAtNobel: The closure captures only `self_weak_` (which is a weak reference, so it won't prevent deallocation of the referenced object). When the closure is *executed*, a strong *local variable* called "self" is created with `__strong __typeof__(self) self = (self_weak_);` . This is a strong reference to the object which exists only during the execution of the closure, it prevents deallocation *while* the closure is executing.
Comment: @MartinR: I guess where I'm confused is in how the closure only captures `self_weak_` when `self_weak_` doesn't appear in the closure, but instead `self` does.
Comment: @MikeAtNobel: `__strong __typeof__(self) self` declares a *local variable* which is completely unrelated to (and shadows) the outer `self`. – The intention of these macros is to make life easier, but choosing the same name for the local strong variable can be confusing. With `__weak __typeof__(self) weakSelf = self;` outside of the closure and `__strong __typeof__(self) strongSelf = weakSelf;` inside the closure it may be more clear.
Comment: @MartinR: Ok, that clears it up. Thanks for that explanation.

Understanding @weakify macro