Pokazywanie postów oznaczonych etykietą JavaScript. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą JavaScript. Pokaż wszystkie posty

19 czerwca 2016

MathJax - Hello World

Test MathJax do zapisywania formuł matematycznych.
Niech \(f\) będzie funkcją ciągła zdefiniowaną dla \( a \leq x \leq b \). Przedział \( [a, b] \) będzie podzielony \( n \) podprzedziałów o równej długości wynoszącej \( \Delta x = \frac{(b - a)}{n} \), tak że \(x_{0} = a \), a \( x_{n} = b \), będącymi końcami tych podprzedziałów i niech \( x_{1}^*, x_{2}^*,... , x_{n}^* \) będą dowolnymi punktami próbkującymi w tych przedziałach, \( x_{i}^* \in [x_{i-1}, x_{i}] \). Wówczas całkę oznaczoną z funkcji \( f \) w przedziale od \( a \) do \( b \) oznaczamy i definiujemy jako:
$$ \int_{a}^{b} f(x) dx = \lim_{n\to\infty} f(x)\sum_{i=1}^{n} f(x_{i}^*) \Delta x $$

26 lipca 2015

[python] V8 JavaScript Engine

V8 to silnik JavaScript, natomiast pyv8 jest jego wrapperem do pythona.
Niestety nie udało mi się znaleźć informacji, w jaki sposób przekompilować wersję dla python-a 3. Z tego co wyczytałem projekt opiera się na boost::python-ie, może okazać się także konieczne zainstalowanie narzędzia scons. Wrapper bazuje na rewizji r19623 i skrypt budujący cofa repozytorium do tej wersji. Jest więc starsze o około 6000 commitów o tego co jest na trunku. Mam nadzieje, że nie oznacza to, że projekt obumiera.
svn checkout http://v8.googlecode.com/svn/trunk/ v8
svn checkout http://pyv8.googlecode.com/svn/trunk/ pyv8

export V8_HOME=~/v8
cp pyv8
python setup.py build

# biblioteka zostanie zapisana w ~/.local
python setup.py install --user 
Przykład:
#! /usr/bin/env python2

import PyV8

ctxt = PyV8.JSContext()
ctxt.enter()
result = ctxt.eval('var str = "Hello world!"; \
                    str.substring(1, 5);')
print(result)
Wynik:
ello

29 kwietnia 2013

Firefox addon - run calc.exe

Przydatna rzecz - wtyczka dla Firefox-a, choć praca nad nią była dość niewygodna. W planach miałem, zbudowanie czegoś podobnego do wtyczki RefControl, która kontroluje co jest wysyłane jako HTTP Referer do strony. Na razie jednak, zacząłem od czegoś prostszego. Do zbudowania wtyczki, posłużył mi Add-on builder:
Poniższy przykład nie robi nic użytecznego. Dopisuje do każdej strony "Hello world" (na jej początku), zapisuje w konsoli vendor-a, a po naciśnięciu ikony widgetu otwiera w nowej zakładce stronkę dupa.pl i uruchamia kalkulator (to jest wersja pod Windows). Poniżej przydatne linki, z dokumentacją do wykorzystanych bibliotek:
Dość często miała problemy ze zdiagnozowanie przyczyny, dlaczego wtyczka się nie "kompiluje". A gdy "kompilacja" już się powiodła, często znikała ikona mojego widget-u. Rozwiązaniem drugiego problemu, było częste zmienianie jego identyfikatora. Bez wątpienia, potrzebna jest pewna wprawa, żeby pisanie następnych mogło odbywać się sprawniej.
// The main module of the niegodziwyberu Add-on.

// Modules needed are `require`d, similar to CommonJS modules.
// In this case, creating a Widget that opens a new tab needs both the
// `widget` and the `tabs` modules.
var Widget = require("widget").Widget;
var tabs = require('tabs');
var { Cc, Ci } = require('chrome');

exports.main = function() {
    // https://addons.mozilla.org/en-US/developers/docs/sdk/latest/modules/sdk/system.html#vendor
    var system = require("sdk/system");
    console.log("Console print, vendor = " + system.vendor);

    // https://addons.mozilla.org/en-US/developers/docs/sdk/latest/dev-guide/tutorials/modifying-web-pages-url.html
    // Import the page-mod API
    var pageMod = require("sdk/page-mod");

    // Create a page mod
    // It will run a script whenever a ".pl" URL is loaded
    // The script replaces the page contents with a message
    pageMod.PageMod({
        include: "*.pl",
        contentScript: 'content.document.body.innerHTML = ' +
                       '"<h1>Hello World</h1>" + content.document.body.innerHTML;'
    });

    // https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIProcess#See_also
    // ZACZEŁO DZIAŁAĆ, PO PRZENIESIENIU TUTAJ
    // create an nsIFile for the executable
    var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);

    // create an nsIProcess
    var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);

    // https://addons.mozilla.org/en-US/developers/docs/sdk/latest/modules/sdk/widget.html
    new Widget({
        // Mandatory string used to identify your widget in order to
        // save its location when the user moves it in the browser.
        // This string has to be unique and must not be changed over time.
        // DA SIĘ COŚ ZROBIĆ, ŻEBY TEGO CAŁY CZAS NIE POPRAWIAĆ?
        id: "niegodziwier-widget-7",

        // A required string description of the widget used for
        // accessibility, title bars, and error reporting.
        label: "NiegodziwyBeru Widget",

        // An optional string URL to content to load into the widget.
        // This can be local content or remote content, an image or
        // web content. Widgets must have either the content property
        // or the contentURL property set.
        //
        // If the content is an image, it is automatically scaled to
        // be 16x16 pixels.
        contentURL: "http://www.mozilla.org/favicon.ico",

        // Add a function to trigger when the Widget is clicked.
        onClick: function(event) {
            // Open a new tab in the currently active window.
            tabs.open("http://dupa.pl");

            // Open calc application
            file.initWithPath("c:\\windows\\system32\\calc.exe");
            process.init(file);
            var args = [];
            process.run(false, args, args.length);
        }
    });

};

21 kwietnia 2013

Ataki "na" i "z" JavaScript

Dwie bardzo fajne prezentacje, które udało mi się ostatnio obejrzeć. Pierwsza, dotyczy ataków na kompilatory JIT, np. JavaScript-owy silnik w przeglądarce.
Druga pokazuje, kto tak naprawdę korzysta z "anonimowych proxy" ;) i jak wstrzykiwać złośliwi kod JavaScript do stron, która przez taki serwer przechodzą.
Przy okazji, dowiedziałem się o ciekawym projekcie. Może kiedyś będzie szansa się w to zagłębić:

28 września 2012

Zasada Pareto

http://pl.wikipedia.org/wiki/Zasada_Pareto



Drugą cześć zasady sobie dopowiedziałem. A tymczasem Hello Google Chart Tools.