Di Muso (del 09/02/2017 @ 00:11:23, in Informatica, linkato 1515 volte)
We have encountered a CIL compilation issue for a custom class which referenced a custom VS project in the AOT.
The errors gave no indication as to the cause and looked as follows:
Cannot create a record in Compiler information (TmpCompilerOutput). Path: \Classes\\, Warning: No proxy found. Type FileIOPermission found on the stack. This code in Class: , Method: .
The record already exists.
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
The interesting thing is, that the class in question compiled fine. However, when we looked at it in the AOT, right after the CIL generation failed, and hovered over the method’s signature line, we saw a context error message stating: CIL generation: Error: .NET Cast Type Name not found. Type System.String found on the stack. This code in Class/Table: , Method: may not work in CIL run time.
In order to resolve we copied the Microsoft.Dynamics.AX.Xpp.Support.dll assembly from the Server/Bin to Client/Bin, which produced a clean CIL compilation.
If you can, before to adopt this solution, I suggest to restart the AOS!!
Di Muso (del 09/02/2017 @ 00:11:23, in Informatica, linkato 1210 volte)
We have encountered a CIL compilation issue for a custom class which referenced a custom VS project in the AOT.
The errors gave no indication as to the cause and looked as follows:
Cannot create a record in Compiler information (TmpCompilerOutput). Path: \Classes\\, Warning: No proxy found. Type FileIOPermission found on the stack. This code in Class: , Method: .
The record already exists.
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
The interesting thing is, that the class in question compiled fine. However, when we looked at it in the AOT, right after the CIL generation failed, and hovered over the method’s signature line, we saw a context error message stating: CIL generation: Error: .NET Cast Type Name not found. Type System.String found on the stack. This code in Class/Table: , Method: may not work in CIL run time.
In order to resolve we copied the Microsoft.Dynamics.AX.Xpp.Support.dll assembly from the Server/Bin to Client/Bin, which produced a clean CIL compilation.
If you can, before to adopt this solution, I suggest to restart the AOS!!
Di Muso (del 25/03/2014 @ 13:27:12, in Informatica, linkato 2903 volte)
tratto da : http://yasirnedian.blogspot.ch/
In this post we will look at how can we delete a label file in Dynamics AX 2012.Labels are no longer a file system like we had in 2009. We now have a new node in AOT - Label Files.
If you search in your application folder, you wont find the label file there.The application folder is located here.
"C:\Program Files\Microsoft Dynamics AX\60\Server\MicrosoftDynamicsAX\bin\ Application\ Appl\Standard".
In Dynamics AX 2012, the label file is imported in your current model.
Now let us restart the AOS and see what happens. After restarting the AOS, go back to your application folder and try to find the label file again. This time the label file will be found.On every AOS restart, all label files will be copied to the application folder from the model store. So your label files are contained in your models but they are stored in your application folder as well.
Now let us try to delete the label file. Right click on your label file. Do you see a delete/remove option?
The answer is "No". so how do we delete the label file then? Below is the method by which a label file can be deleted easily.
To create a temporary model
Move our label file to the temporary model
Stop the AOS
Delete the temporary model
Start the AOS
Let 's do step by step.
Go to Tools -> Model management -> Create model.
Enter name as TmpModel. Press OK. You will recieve an info message saying “The model TmpModel was created successfully in layer usr.”
Right click on your label file and select “Move to model”.
Select the TmpModel checkbox and press OK.
Stop the AOS.
Open command prompt (Microsoft Dynamics AX 2012 Management Shell). We will be using the command line utility AXUTIL to delete the model.
Issue the following command in the command prompt.
AXUTIL delete /model:TmpModel
You will be prompted if you want to delete the model or not. Press Y
Start the AOS.
Delete the label file from your application folder as well.
When you open AX now, you will get a dialog saying that “Your model store has been modified.” This is normal because each time you perform an operation on a model, you will get this dialog. Depending on your operation, you should select one of the option. Since we just deleted a model which just had a label file, select Skip.
Open AOT and notice that the label file is deleted now.
It was a standard installation of MySQL (typical install option) on plain Windows 8 Standard and the same for Windows 7. The test run was a batch of 500.000 INSERT commands in an SQL script. Runtime was 4 minutes on Win7 and 4 hours Win8.
Some tests later we found out that it was only bad on InnoDB. Finally we nailed the problem down to one parameter in MySQL:
Each INSERT statement is a single transaction (autocommit mode). MySQL is configured very faithfully and ensures that each transaction is really stored on disk. This is necessary for ACID compliance. D in ACID stands for 'durability'. To store data durable, at least the log file has to be written physically. That's why MySQL when a transaction commits forces the operating system to flush its buffers and even forces the disk cache to flush its buffer. That's the meaning of flush_log_at_trx_commit = 1 in the my.ini or my.cnf file.
MSSQL is much more relaxed with your data. It writes the data to disk device. But it may stay in the disk cache, and MSSQL does not care. If you have a crash, your data is not up-to-date on the physical disk and you may lose data. This is definitely not ACID compliant. Microsoft documented this here:
By default, the disk cache is enabled. Use the 'Disk Properties', Hardware tab to access the 'Properties', 'Policy' tab to control the disk cache setting. (Note Some drives do not honor this setting. These drives require a specific manufacturer utility to disable cache.)
...
Disk caching should be disabled in order to use the drive with SQL Server.
So to have a fair comparison beween MSSQL and MySQL either
set innodb_flush_log_at_trx_commit = 2 This forces the flush to disk only once per second and brings good performance but data is not 100% safe on disk (unless you have a battery backed write cache)
disable the disk cache in Windows 8 This will force MSSQL to write physically to disk. And then Win8 is 30 times slower than before.
If you need more info on the different cache levels for file IO here is a very good link:
Di Muso (del 30/07/2012 @ 10:27:14, in Informatica, linkato 7118 volte)
Come capita piu' o meno a tutti, anche io sono stato vittima di spam, quindi vi scrivo questa breve guida per inserire nel vostro bel dBlog il reCaptcha. AVVISO che l'eliminazione dello spam NON e' IMMEDIATA!!! Suppongo per una questione di caching delle pagine sui server in giro per il mondo che permettono un accesso alle pagine con il vecchio codice. Cmq Tempo un mesetto e tutto si risolve.
File da modificare: - articolo.asp - commenti_invio.asp
in ordine dovrete sostituire in articolo.asp le seguenti righe (cioe' il form):
con il seguente form
mentre in commenti_invio.asp sostituire :
Dim SQLCommenti, RSCommenti, FIDA, FIDF, FIDFotografia, FIDArticolo, FCommento, FAutore, FLink, FTipologia, Errore, SQLControlloAutore, RSControlloAutore, ArrayParoleNonAmmesse, IArrayParoleNonAmmesse, ParolaNonAmmessaFiltrata, IParolaNonAmmessa, SQLCommentiTitoloRelativo, RSCommentiTitoloRelativo, TitoloRelativo
'Se i commenti sono abilitati eseguo l'invio If Abilita_Commenti Then
If Request.Form("campoNascosto") = "" Then
If CheckCAPTCHA(Trim(Request.Form("strCAPTCHA"))) Then
'Effettuo il controllo sul parametro id
con le seguenti, ricordandovi di inserire la VOSTRA private key nella riga recaptcha_private_key = "your_private_key" ' your private key
recaptcha_challenge_field = Request("recaptcha_challenge_field")
recaptcha_response_field = Request("recaptcha_response_field")
recaptcha_public_key = "6LegAcASAAAAADYH-RDuZqrp7QdFr_VXaFd8BWe6" ' your public key
recaptcha_private_key = "your_private_key" ' your private key
Dim SQLCommenti, RSCommenti, FIDA, FIDF, FIDFotografia, FIDArticolo, FCommento, FAutore, FLink, FTipologia, Errore, SQLControlloAutore, RSControlloAutore, ArrayParoleNonAmmesse, IArrayParoleNonAmmesse, ParolaNonAmmessaFiltrata, IParolaNonAmmessa, SQLCommentiTitoloRelativo, RSCommentiTitoloRelativo, TitoloRelativo, WordNotPermitted
'Se i commenti sono abilitati eseguo l'invio
If Abilita_Commenti Then
If Request.Form("campoNascosto") = "" Then
server_response = ""
newCaptcha = True
if (Request.Form("recaptcha_challenge_field") <> "" or Request.Form("recaptcha_response_field") <> "") then
Dim VarString
VarString = _
"privatekey=" & recaptcha_private_key & _
"&remoteip=" & Request.ServerVariables("REMOTE_ADDR") & _
"&challenge=" & Request.Form("recaptcha_challenge_field") & _
"&response=" & Request.Form("recaptcha_response_field")
Dim objXmlHttp
Set objXmlHttp = Server.CreateObject("Msxml2.ServerXMLHTTP")
objXmlHttp.open "POST", "http://www.google.com/recaptcha/api/verify", False
objXmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objXmlHttp.send VarString
Dim ResponseString
ResponseString = split(objXmlHttp.responseText, vblf)
Set objXmlHttp = Nothing
if ResponseString(0) = "true" then
'They answered correctly
server_response = ""
else
'They answered incorrectly
server_response = ResponseString(1)
end if
newCaptcha = False
end if
if server_response <> "" or newCaptcha then
if newCaptcha = False then
%>
If FIDA <> 0 OR FIDF <> 0 Then
FCommento = Replace(SostituisciCaratteri(Request.Form("Commento"), "No"), VbCrLf, " ")
If Len(Testo_Parole_NonAmmesse) > 0 AND Len(FCommento) > 0 Then
ArrayParoleNonAmmesse = Split(Testo_Parole_NonAmmesse, ",")
For IArrayParoleNonAmmesse = 0 To UBound(ArrayParoleNonAmmesse)
ParolaNonAmmessaFiltrata = ""
con
Dim foundCommento
Dim foundAutore
Dim foundLink
Dim foundIPas
Dim FIp
Errore = False
WorldNotPermitted = False
If FIDA <> 0 OR FIDF <> 0 Then
FCommento = Replace(SostituisciCaratteri(Request.Form("Commento"), "No"), VbCrLf, " ")
FAutore = SostituisciCaratteri(Request.Form("Autore"), "No")
FLink = SostituisciCaratteri(Request.Form("Link"), "No")
FTipologia = Request.Form("Tipologia")
FIp = Request.ServerVariables("REMOTE_ADDR")
If Len(Testo_Parole_NonAmmesse) > 0 AND Len(FCommento) > 0 Then
ArrayParoleNonAmmesse = Split(Testo_Parole_NonAmmesse, ",")
For IArrayParoleNonAmmesse = 0 To UBound(ArrayParoleNonAmmesse)
'START Add by muss 20120615
foundCommento = InStr(FCommento, ArrayParoleNonAmmesse(IArrayParoleNonAmmesse))
foundAutore = InStr(FAutore, ArrayParoleNonAmmesse(IArrayParoleNonAmmesse))
foundLink = InStr(FLink, ArrayParoleNonAmmesse(IArrayParoleNonAmmesse))
foundIP = InStr(FIp, ArrayParoleNonAmmesse(IArrayParoleNonAmmesse))
If (foundCommento <> 0) OR (foundAutore <> 0) OR (foundLink <> 0) OR (foundIP <> 0) Then
'If foundCommento = True Then
WorldNotPermitted = True
Errore = True
End If
'END by muss 20120615
ParolaNonAmmessaFiltrata = ""
Dopodiche' entrate come amministratori nel pannello di controllo di dBlog, andate nella sezione "Configurazione", dal menu' a tendina scegliete "Commenti".
A questo punto bisogna fare due modifiche, agli ultimi due campi in fondo:
- alla voce "Testo del campo Captcha anti-spam:" lasciare solo "Anti-Spam:" cancellando il resto
- alla voce "Errore campo Captcha numeri sbagliati" inserite una frase a piacere, Io ho inserito la seguente "le parole inserite in reCaptcha non sono corrette"
Qualche post da ip cinese lo riceverete ancora ma si tratta di un paio di post alla settimana (almeno nel mio caso).
Anche per questo ho aggiunto un controllo sulle parole ammesse anche nella firma e nell'IP che viene registrato, quindi se entrate come amministratori nella console alla voce commenti potete inserire un po' di parole o indirizzi ip che volete filtrare.
Se avete problemi contattatemi via mail, sono sempre presissimo e rischiate che passino giorni prima di ricevere una risposta a un commento inserito quì.
Un’azienda chiamata Albine ha prodotto un add-on che impedisce a Google di tenere d’occhio le nostre ricerche. Per il momento si parla di disponibilità esclusiva per Firefox, ma una conversione per altri popolari browser è in corso di studio.
La tecnologia dell’add-on è stata acquisita da una security firm chiamata Moxie Marlinspike, e consiste nel piazzare un “intermediario” che fa da filtro tra noi e Google, impedendo al motore di ricerca di conoscere i responsabili di una data ricerca. Questo semplice meccanismo non è completamente dissimile dall’escamotage che ha attuato Amazon per potenziare le ricerche per il suo browser, Silk, pensato apposta per il Kindle Fire.
Ovviamente va fatto notare che Silk usa questo tramite per aumentare la velocità del browsing, e che l’anonimato nei confronti di Google è un effetto collaterale (voluto o meno da parte di Amazon). Questo add-on, che l’azienda ha chiamato semplicemente Protected Search, è rivolto a chi vuole oscurarsi da qualsiasi motore di ricerca.
Purtroppo, almeno per quanto riguarda i più paranoici, Protected Search è impotente contro i servizi in cui è necessario fare login come Google+ e Gmail. La tecnologia originariamente usata da Marlinspike è già in giro da un paio d’anni, ma l’acquisto da parte di Albine ha fatto sì che fosse possibile investire nel progetto e preparare una nuova versione capace di supportare per bene le ultime uscite di Firefox.
Albine è uno start-up che sembra intenzionato a monetizzare l’intenso desiderio di una fetta di utenza di uscire dal gioco del tracking online - Protected Search è gratuito, ma altri servizi di Albine sono a pagamento. In questi giorni la stessa Mozilla è salita su quello che sembra ormai un carrozzone (nonostante le buone intenzioni): l’abbiamo vista annunciare addirittura al TED la disponibilità del proprio add-on, Collusion, utile per scoprire chi “ci dà la caccia” per i siti. Sistemi volontari e no-profit come Tor sono invece disponibili già da anni per chi è abbastanza smaliziato e paziente da imparare ad usarli.
It's somewhat hard to imagine that NASA doesn't need the computing power of an IBM mainframe any more but NASA CIO posted on her blog today at the end of the month, the Big Iron will be no more at the space agency.
NASA CIO Linda Cureton wrote: This month marks the end of an era in NASA computing. Marshall Space Flight Center powered down NASA's last mainframe, the IBM Z9 Mainframe. For my millennial readers, I suppose that I should define what a mainframe is. Well, that's easier said than done, but here goes -- It's a big computer that is known for being reliable, highly available, secure, and powerful. They are best suited for applications that are more transaction oriented and require a lot of input/output - that is, writing or reading from data storage devices.
In my first stint at NASA, I was at NASA's Goddard Space Flight Center as a mainframe systems programmer when it was still cool. That IBM 360-95 was used to solve complex computational problems for space flight. Back then, I comfortably navigated the world of IBM 360 Assembler language and still remember the much-coveted "green card" that had all the pearls of information about machine code. Back then, real systems programmers did hexadecimal arithmetic - today, "there's an app for it!"
But all things must change. Today, they are the size of a refrigerator but in the old days, they were the size of a Cape Cod. Even though NASA has shut down its last one, there is still a requirement for mainframe capability in many other organizations.
Of course NASA is just one of the latest high profile mainframe decommissionings. In 2009 The U.S. House of Representatives took its last mainframe offline. At the time Network World wrote: "The last mainframe supposedly enjoyed "quasi-celebrity status" within the House data center, having spent 12 years keeping the House's inventory control records and financial management data, among other tasks. But it was time for a change, with the House spending $30,000 a year to power the mainframe and another $700,000 each year for maintenance and support."
This past September we released one of our Ruby on Rails State of the Stack reports, which presents stats on Ruby usage among our customers. The report shows the most commonly deployed versions of Ruby, the top gems used, the most commonly used app containers, etc. We got to thinking that this might be interesting data to provide for other languages that we support too, such as Java. So…we decided to take a look at our top 1000 Java customers to see what versions of Java they are using and what app servers are most commonly deployed. For example, just about everyone is on Java 1.6 with the most popular version being 1.6.0_20 followed closely by 1.6.0_26. What about app servers? What are folks using? The answer was intriguing so we thought we’d share it via a new infographic…
I've been spending some time studying a tool for looking at the structure of code bases. After having tried out some of the more basic possibilities I wanted to go for the finer points and study changes between two versions of code to see what effect my changes made. This is where I realise that I would like to have a local Subversion repository not only for this, but also for how it would benefit some of my hobby projects. After some googling I found my way to http://subversion.tigris.org/project_packages.html where, since I'm on windows, I picked the windows path. I end up downloading the latest version of Subversion: http://subversion.tigris.org/files/documents/15/45344/svn-win32-1.6.0.zip
I unpack it in "C:\Program Files\Subversion". To get the commands to work you have to add the bin to your path. In my case I add "C:\Program Files\Subversion\svn-win32-1.5.6\bin" to the path. After this I open up a command window and do the following:
mkdir subversionRepository cd subversionRepository svnadmin create project1
Now, in order to make Subversion work in Eclipse I add http://subclipse.tigris.org/update_1.6.x to my update sites. After downloading this I restart my Eclipse and go to Window -> Show View ->Other->SVN -> SVN Repositories. I right click in the opened view and create a new repository location. Instead of writing a http adress in the URL window I now type "file:///C:/subversionRepository/project1". Notice the three forward slashes after "file:".
I now have an empty repository that I want to put my project into so I right click on the repository and add a new remote folder that I call trunk. Right clicking on the trunk I can now import my project by importing the folder that contains the .project file. I hit F5 to refresh the view and can see that the trunk is now filled with my first version of my project.
But I also have to associate the repository version with Eclipse, so now I right click in the Package Explorer and choose Import -> SVN -> Checkout Projects from SVN. I pick my previously created repository, click next, mark the trunk and then click finish. I get a question if I want to overwrite my previously created project with the same name and say ok. I won't need that now that I got a versioning system!
I can now finally continue my studies of the tool I was looking into.