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 $$
ekstaza, geniusz, przebłysk, olśnienie, półprawdy, półśrodki, przemilczenia, zaćmienia, głupstwa, kłamstewka, oszustwa, hultajstwo, wyrachowanie, nieprawda, nieobiektywność, niepodważalna prawda, nierówność, nieomylność, słuszność, perfekcja, krnąbrność ... niegodziwość
Pokazywanie postów oznaczonych etykietą Hello world. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą Hello world. Pokaż wszystkie posty
19 czerwca 2016
MathJax - Hello World
Test MathJax do zapisywania formuł matematycznych.
23 lipca 2015
Budowanie aplikacji NaCl (NativeClient) w przeglądarce
Podjąłem próbę zbudowania przykładowej aplikacji NaCl w przeglądarce, ale muszę się przyznać, że odniosłem porażkę. Może w przyszłości jeszcze się tym zajmę. Do pracy zachęcił mnie filmik:
Ale w kilku miejscach jest on nieaktualny, dlatego warto równolegle śledzić odświeżoną wersję dokumentacji:
Kilka problemów, które mi się przytrafiły.
Ale w kilku miejscach jest on nieaktualny, dlatego warto równolegle śledzić odświeżoną wersję dokumentacji:
Kilka problemów, które mi się przytrafiły.
- Przy pierwszym odpaleniu, konsola zawisała podczas ściągania pakietów. Pomogło zamknięci i ponowne odpalenie, za każdym razem kolejne pakiety się instalowały i konsola zawisała na jakimś następnym. Trzeba było kontynuować, dopóki nie pokazał się prompt bash-a.
- Uruchomienie programu natychmiast zamykało konsolę. Rozwiązaniem okazało się wyłącznie "Native Client GDB-based debugging".
- Po odpaleniu dema, aplikacja wyświetlała w przeglądarce status: "Status: ERROR [NaCl module load failed: Nexe crashed during startup]". Niestety tego nie udało mi się już pokonać.
25 stycznia 2014
[CERN] ROOT library - instalacja
Pierwsze podejście do biblioteki ROOT tworzonej przez CERN, z myślą o fizykach. Opowiadał o niej Vassil Vassilev na konferencji C++Now, kiedyś już podsyłałem linka: Interactive, Introspected C++ at CERN. Niestety nie znalazłem paczki, z której mógłbym sobie to zainstalować więc pozostała metoda ręcznej kompilacji. ROOT oferuje kilka ścieżek, na razie wybrałem najbardziej leniwą. Celem, jest odpalenie najprostszego przykładu. Linki:
- http://root.cern.ch/drupal/content/installing-root-source
- http://root.cern.ch/drupal/content/build-prerequisites
$ git clone http://root.cern.ch/git/root.git $ cd root $ ./configure $ make ============================================================ === ROOT BUILD SUCCESSFUL. === === Run 'source bin/thisroot.[c]sh' before starting ROOT === ============================================================ # Następnie trzeba wykonać skrypt, który ustawi ścieżki do # plików wykonywalnych (PATH) i biblioteki (LD_LIBRARY_PATH) $ source ./bin/thisroot.shTeraz zostajemy zachęceni do wykonania komendy "root", która uruchamia interpreter cling-a.
cling C/C++ Interpreter: type .? for help.
root [0] printf("Hello World!\n");
Hello World!
root [1]
21 grudnia 2013
[C++14] Hello world
Kompilacja z ficzerami dla C++14. Niestety dla clang-3.4 wymagało to trochę zachodu, ale w końcu się udało. Przed kompilacją trzeba było doinstalować "libc++-dev - LLVM C++ Standard library (development files)".
sudo apt-cache search libc sudo apt-get install libc++-devNastępnym krokiem była edycja pliku cstdio. Jak przeczytałem pod tym linkiem, ::gets najwyraźniej zostało usunięte ze standardu, a ja przy próbie kompilacje otrzymywałem następujący error:
/usr/include/c++/v1/cstdio:156:9: error: no member named 'gets' in the global namespace
using ::gets;
~~^
1 error generated.
Sama poprawka jaką należy wprowadzić do /usr/include/c++/v1/cstdio, czyli otoczyć gets defajnsem:#if !_ISOC11_SOURCE using ::gets; #endifKompilacja wygląda następująco:
$ clang++ -std=c++1y -stdlib=libc++ main.cppI kod, na którym testowałem
#include <iostream>
using namespace std;
auto fun() {
return "Hello world";
}
int main() {
cout << fun() << endl;
return 0;
}
12 listopada 2013
include-what-you-use, podejście drugie
W sierpniu include-what-you-use doczekał się aktualizacji, a ja postanowiłem podjąć kolejną próbę kompilacji tego narzędzia. Wszystko wykonałem jak za ostatnim razem. Tym razem zaczęło działać! Dodatkowo zapisałem zmiany w llvm/tools/clang/tools/CMakeLists.txt ...
Najpierw próbowałem ustawić CMAKE_CXX_COMPILER w CMakeLists.txt (set dla CMAKE_CXX_COMPILER musi znaleźć się przed project!). Trzeba było też wyczyścić cały projekt (został kod i CMakeLists.txt) i zrestartować QtCreator-a, żeby pojawił się jakiś efekt. CMake poskarżył się tylko, że tym się nie da kompilować.
add_subdirectory(diagtool) add_subdirectory(driver) add_subdirectory(include-what-you-use) if(CLANG_ENABLE_REWRITER) add_subdirectory(clang-format) endif() if(CLANG_ENABLE_ARCMT) add_subdirectory(libclang) add_subdirectory(c-index-test) add_subdirectory(arcmt-test) add_subdirectory(c-arcmt-test) endif() if(CLANG_ENABLE_STATIC_ANALYZER) add_subdirectory(clang-check) endif() # We support checking out the clang-tools-extra repository into the 'extra' ... add_llvm_external_project(clang-tools-extra extra)... oraz llvm/tools/clang/tools/Makefile
CLANG_LEVEL := .. include $(CLANG_LEVEL)/../../Makefile.config DIRS := include-what-you-use PARALLEL_DIRS := driver diagtool ifeq ($(ENABLE_CLANG_REWRITER),1) PARALLEL_DIRS += clang-format endif ifeq ($(ENABLE_CLANG_STATIC_ANALYZER), 1) PARALLEL_DIRS += clang-check endif ifeq ($(ENABLE_CLANG_ARCMT), 1) DIRS += libclang c-index-test c-arcmt-test PARALLEL_DIRS += arcmt-test endif # Recurse into the extra repository of tools if present. OPTIONAL_PARALLEL_DIRS := extra ifeq ($(BUILD_CLANG_ONLY),YES) DIRS := libclang c-index-test include-what-you-use PARALLEL_DIRS := driver OPTIONAL_PARALLEL_DIRS := endif include $(CLANG_LEVEL)/MakefilePoniżej plik, z którym eksperymentowałem.
#include <iostream>
#include <cstring>
#include <stdio.h>
#include <boost/optional.hpp>
using namespace std;
int main()
{
cout << "Hello World!" << endl;
return 0;
}
Niestety nie udało mi się zmusić CMake, aby wygenerował dla mnie odpowiedni plik Makefile z ustawionym include-what-you-use jako kompilator. Najpierw próbowałem ustawić CMAKE_CXX_COMPILER w CMakeLists.txt (set dla CMAKE_CXX_COMPILER musi znaleźć się przed project!). Trzeba było też wyczyścić cały projekt (został kod i CMakeLists.txt) i zrestartować QtCreator-a, żeby pojawił się jakiś efekt. CMake poskarżył się tylko, że tym się nie da kompilować.
set(CMAKE_CXX_COMPILER "~/poligon/build/Debug+Asserts/bin/include-what-you-use")
project(include_test)
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})
Drugie podejście z linii komend, efekt niestety taki sam. cmake CMakeLists.txt \ -DCMAKE_CXX_COMPILER="~/poligon/build/Debug+Asserts/bin/include-what-you-use"Skończyło się na własnej wersji Makefile.
make -k CXX=~/poligon/build/Debug+Asserts/bin/include-what-you-useA oto wynik.
main.cpp should add these lines: main.cpp should remove these lines: - #include <stdio.h> // lines 3-3 - #include <boost/optional.hpp> // lines 4-4 - #include <cstring> // lines 2-2 The full include-list for main.cpp: #include <iostream> // for operator<<, basic_ostream, etc --- make: *** [main] Error 1
3 listopada 2013
[C++11] Współbieżność
Pierwsze podejście do współbieżności, wprowadzonej do biblioteki standardowej wraz z nowym standardem.
Budowanie z linii poleceń:
#include <thread>
#include <iostream>
void hello()
{
std::cout << "Hello World!" << std::endl;
}
int main()
{
std::thread t(hello);
t.join();
return 0;
}
Było trochę kłopotów przy próbie kompilacji (gcc - 4.7.3, clang - 3.2-1). gcc potrzebuje dodatkowej flagi w postaci pthread, natomiast clang w wersji 3.2 jeszcze nie radzi sobie z wątkami, ale i na to znalazł się sposób. Budowanie z linii poleceń:
$ g++ -pthread --std=c++11 main.cpp
$ clang++ -pthread --std=c++11 \
-D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 \
-D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 \
-D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 \
-D__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 main.cpp
Poniżej ustawienie dla CMakeList.txt (cmake):project(thread_hello)
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
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:
- http://www.mozilla.org/en-US/firefox/video/?video=builder-tutorial
- https://builder.addons.mozilla.org/
- https://addons.mozilla.org/en-US/developers/docs/sdk/latest/modules/sdk/system.html#vendor
- https://addons.mozilla.org/en-US/developers/docs/sdk/latest/dev-guide/tutorials/modifying-web-pages-url.html
- https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIProcess#See_also
- https://addons.mozilla.org/en-US/developers/docs/sdk/latest/modules/sdk/widget.html
// 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);
}
});
};
1 listopada 2012
Kompilacja kodu assemblera i łączenie z g++
Jak zmusić kompilator do wygenerowania kodu assemblera, by go zmodyfikować i ponownie użycia do kompilacji?
Magiczny ciąg komend:
Po modyfikacji kodu assemblera, generujemy object-file, z którego ponownie skorzysta g++ (linijka 2).
Magiczny ciąg komend:
Po modyfikacji kodu assemblera, generujemy object-file, z którego ponownie skorzysta g++ (linijka 2).
g++ -S main.cpp as main.s -o main.o g++ main.o -o mainNasz kod, który chcemy zobaczyć w assemblerze:
#include <stdio.h>
int main()
{
printf("Hello world\n");
return 0;
}
Nasza modyfikacja w kodzie assemblerze (main.s):.file "main.cpp"
.section .rodata
.LC0:
.string "Hello Kitty ;)"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushl %ebp
.cfi_def_cfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp
.cfi_def_cfa_register 5
andl $-16, %esp
subl $16, %esp
movl $.LC0, (%esp)
call puts
movl $0, %eax
leave
.cfi_restore 5
.cfi_def_cfa 4, 4
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3"
.section .note.GNU-stack,"",@progbits
Wynik:Hello Kitty ;)
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.
Drugą cześć zasady sobie dopowiedziałem. A tymczasem Hello Google Chart Tools.
20 sierpnia 2012
Subskrybuj:
Posty (Atom)