آموزش طبخ خرما تخم مرغ

دیباچه

غالبا می‌بینم وقتی از خرما-تخم‌مرغ حرف میزنم بیشترین دسته آدما تا حالا نخوردن. خیلی عجیبه چون خیلی ساده و ارزون و مقوی و خوشمزه است. اما خرما تخم-مرغ ازون دسته غذا هایی یک عده خوششون نمیاد و یک عده خیلی خوششون میاد و خب اونایی که خوششون میاد خیلی بیشر حال میکنن طبیعتا :))))) دلیلش هم احتمالا اینه که اولا شیرینه و دوما وقتی خرما با تخم‌مرغ مخلوط میشه توی طبخ ایده‌ال تخم مرغ یک حالت نرم و آبدار تر و البته رنگ عجیبی میگیره که ترکیبش به مزاق بعضیا خوش نمیاد. بی لیاقت ها.

مواد لازم

  • تخم مرغ
  • خرما
  • روغن حیوانی یا کره یا روغن مایع

نحوه طبخ

ترکیب نسبت مقدار خرما و تخم مرغ اهمیت به سزا داره اگه خرما زیاد شه شیرینیش دل رو میزنه و اگه کم بشه حس یک چیز کم مزه رو میگیرید. پس خرما رو جوری بریزید که مقدار تخم مرغ هاتون بیشتر باشه و جوری هم نباشه که هر لقمه همه‌اش خرما باشه. هم یک خط در میون خرما رو داشته باشید

بعد اول خرما هارو از وسط نصف کنید و هسته اش رو در بیارید و سرخ کنید خرما نرم که شد و بوش رو پس داد تخم مرغ هارو بشکنید و هم بزنید تا بافت تخم مرغ نرم بمونه و تیکه هاش کوچیک، آخرش یک چسه نمک هم بریزید

مراحل انجام کار همراه با تصویر

۱.

سرخ کردن خرما ها
  • متاسفانه از افزودن تخم مرغ عکسی در دسترس نیست

۲.

یک چسه نمک

۳.

نوش جان

شب پرستاره

یادداشتی کوتاه پیرامون شروع ۲۴ سالگی

زمانی در نوجوانی سعی در نوشتن داشتم. داستان می‌نوشتم، غالبا کوتاه. گاهی هم کمی شعر. ویژگی تقریبا ثابت آنچه که می‌نوشتم پیچیدگی بود و تکلف. این باعث می‌شد تا غالبا مورد تحسین قرار بگیرند اما استاد من متفاوت فکر می‌کرد، معتقد بود این پیچیدگی حاصل نداشتن مهارت کافی در نوشتن است و باور داشت یک قطعه ادبی می‌تواند در کنار همه تزیینات و شاخص‌های ادبی‌اش ساده باشد و روان و سبک.

نوشتن (زیبا و هنرمندانه نوشتن) هنر بزرگیست و البته بسیار پیچیده اما خب حق کاملا با فریبا بود با همه این سختی‌ها زیباترین آثار، آثاری هستند که سبکی آن به جان می‌نشیند و ساده نوشتن بسیار سخت است. زندگی نیز بسیار پیچیده است، کوچکترین عمل هم نیاز به تفکر دارد‌:‌ چرا همچین رفتاری کردم؟ چرا در آن لحظه خندیدم؟ چرا چنین شوخی‌ای کردم؟ هدف از زندگی چیست؟ چرا اضافه وزن دارم؟ چگونه سر صحبت را باز کنم؟

می‌بینید؟ سوال‌هایی ساده که می‌توانند جواب‌های ساده‌ای نداشته باشند و بسیار پیچیده باشند. خب یک سوال دیگر : یک زندگی هنرمندانه چگونه زندگی‌ای می‌تواند باشد؟ زندگی‌ای ساده و روان و سبک و خب رسیدن به آن بسیار مشکل است. بسیار رنج باید برد تا بتوان ساده و روان زندگی کرد. تا به یک زندگی کننده خبره تبدیل شویم. کد های ساده و خونا غالبا متعلق به برنامه‌نویس های خبره‌ای است که طعم مشکلات را چشیده‌اند و مسائل در ذهنشان در گذر زمان حلی ساده‌تر یافته است و دید آن‌ها تغییر کرده است.

سوال‌هایی هم هستند که جوابی ندارند. تعریف خوبی چیست؟ چه عملی را نیک بنامیم؟ پس از مرگ چه خواهد شد؟ این سوال ‌ها مرز زندگی انسان را تعیین می‌کنند

زاده شدن در مرزهای جغرافیا را جبر جغرفیا می‌گوییم زیستن میان مرزهای زندگی را به چه نامی بخوانیم؟ جبر زندگانی؟

سنگینی این زندگی بر دوش ماست و باید ساده‌اش کنیم. قسمتی از این سادگی در رهایی نهفته است. چیزهایی را دوست داریم و می‌پسندیم و نمی‌دانیم چرا. خب کار ما شاید نیست شناسایی گل سرخ

چرا این نقاشی بی‌اندازه زیباست؟
شب پر ستاره اثر ونگوگ

.باید پذیرفت که همه چیز را نمی‌توان به زبان حروف آمیخت و دانست. باید حسش کرد. همین

انسان نمی‌تواند هر چیز یا کسی که اراده کند را دوست بدارد و قرار نیست به هر چیز یا هر کس که علاقه دارد برسد، این هنر رهایی است

ما نیستیم موجودی که بتواند به هر مسیر براند اما در مسیری که قرار می‌گیریم می‌توانیم سرخوشانه سرمستی و عاشقی کنیم. در میان مرز‌های زندگانی و بر زیر سایه‌ی جبر زندگانی

Search Like a Boss

Very simple instant search UI

Instant Search Using RxJava2

Purpose: While I was searching for the best practice of instant search implementations with RxJava, I said yea it’s heaven. There are lots of samples. I used one of these examples with a few changes and the result was horrible. PO was sad, I was sad, Users were sad. Those examples weren’t designed for production application and millions of users. Those were just some kind of bootstrap.

What where the problems they didn’t cover ?

  • Retry and Error Handling : You have an smile on your lips and you are typing on your phone to search some shit but an error occurs. What do you expect? the minimum expectation is to retry your query but those samples simply dispose and if you continue to type, you will not see a thing.
  • Interrupt and Cancel Last Requests : We are talking about instant search, While user is typing we may send undesired requests to the server. For example if user wanted to search “Star Wars” if user typed slowly to reach the wait threshold app might send both “Star wa” and ” Star wars” requests. Preferable behavior is to cancel the “Star wa” query request to prevent from unwanted concurrent results. Those samples simply just send a new request per query or funny thing happens : they will throw java.io.InterruptedIOException exception and due to the lack of exception handling, search will break.
  • Clear Text Issue : a Standard search box most of the times contains a “Clear” button which clears all the characters and makes edit text ready to accept new input. This bug will occur when user types a word like “Star Wars” so fast and while the request is sent, user clicks on the clear button. button action makes edit text clean and removes old results but after a while result of “Star Wars” request comes and the UI suddenly shows results of “Star Wars” phrase. Funny? Not in a deadline.

I mentioned bugs I faced into during implementation, so you have a sense about reasons of codes in Rx chain or maybe you offer a better approach. I skip boilerplate codes and I stick to the concept, you can see full sample on GitHub repository.

GitHub Repo Link : https://github.com/alizeyn/RxSearchSample

Here you can see what the whole search code really is, and I describe more details about every operator below.

RxTextView.textChanges(searchEditText)
                .map(CharSequence::toString)
                .doOnNext(this::showSearchViews)
                .filter(string -> string.length() >= MIN_CHAR_TO_SEARCH)
                .debounce(SEARCH_QUERY_DELAY, TimeUnit.MILLISECONDS)
                .subscribeOn(Schedulers.io())
                .switchMap(api::search)
                .retry()
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(this::next, Throwable::printStackTrace);

  • RxTextView.textChanges(searchEditText) RxTextView is an UI componenet from RxAndroid library, emits any change from textView or EditText (which is a TextView).
  • map(CharSequence::toString) RxTextView emits value as CharSequence and by map operation it changes the CharSequence to the Observable type we need which is a String.
  • doOnNext(this::showSearchViews) This is how we handle “Clear Text Issue”
    private void showSearchViews(String s) {
        if (s.length() > MIN_CHAR_TO_SEARCH) {
            searchRecyclerView.setVisibility(View.VISIBLE);
        } else {
            adapter.updateData(Collections.emptyList());
            searchRecyclerView.setVisibility(View.GONE);
        }
    }

Since the search logic doesn’t search words contain less than two characters, UI shouldn’t be changed to the “searching in progress UI” when there is only one character in the search edit text (UI should still stay at the idle state). Also imagine you were typing “Star W” to search but suddenly you changed your mind and now you want to type “The Dark Knight” in the search bar. Instead of clicking on the clear text button (x) you press Backspace of your keyboard several times, when first phrase (“Star W”) changed to “S” the UI should be changed to idle state. This is what doOnNext actually does here : Changing UI state as the search phrase changes.

  • filter(string -> string.length() >= MIN_CHAR_TO_SEARCH) As I said above search process needs at least two characters to start. Filter emits Observable which contains more than MIN_CHAR_TO_SEARCH.
  • debounce(SEARCH_QUERY_DELAY, TimeUnit.MILLISECONDS) We are developing an instant search then we should change the result when the query is changed, Does it mean request to the server with each query change? The answer is No. It’s a huge request rate for server to serve. So the approach is to wait a specific time (T) if user typed something before T, request would not be sent and wait progress would starts again. If T time passed, request would be sent to the server. This operation reduces server load.
  • subscribeOn(Schedulers.io()) SubscribeOn tells RxJava to create observable in specified thread. In our case it’s a network request so the right thread is io thread. Read more about subscribeOn and observeOn.
  • switchMap(api::search)
@GET("api/v1/movies")
Observable<SearchResponse> search(@Query("q") String name);

switchMap Maps user query string to result from server. The reason for selecting SwitchMap over flatMap (or Map) is that in swtichMap if observable emits something new, previous emissions are no longer produce mapped observables this is an effective way to avoid stale results.

  • retry() When you’re implementing a service, which user is interacting to it continuously, Error handling is much more important. If something went wrong user should still be able to interact with the application. retrty() Operator is an approach. If a source Observable emits an error, resubscribe to it in the hopes that it will complete without error. Keep in mind that RxJava, onError is the end of everything. When you get an Error and onError is called, your observer is disposed. You should handle errors before errors happen.

I want to clear up something that many RxJava beginners get wrong: onError is an extreme event that should be reserved for times when sequences cannot continue. It means that there was a problem in processing the current item such that no future processing of any items can occur.

Further information about onError
  • observeOn(AndroidSchedulers.mainThread()) Since we need to show the list in the UI (main thread) the emission should be happen in the main thread. For example show the result in RecyclerView or produce the right message to user.
  • subscribe(this::next, Throwable::printStackTrace) As onComplete and onSubscribe is not needed I implemented just onNext and onError.
    private void next(SearchResponse searchResponse) {
        List<Movie> data = searchResponse.getData();
        if (data != null) {
            adapter.updateData(data);

            if (data.size() == 0) {
                Toast.makeText(SearchActivity.this,
                        "no result",
                        Toast.LENGTH_SHORT).show();
            }
        }
    }

Done 🙂

If you have any questions or you’ve got a better approach in your mind just let me know.

Rasht Travelogue

A view of a forest from a local cafe window, Masuleh

A nice afternoon, low light on the leafs of Schefflera was a royal scene. A cup of tea and sound of Saxophone in the background convinced me this is the most relaxing afternoon I’ve ever had. I had just started to listen to a Persian podcast (Radio Deev) at the time. I played the 8th episode, the name was : “Tomorrow the sky of Rasht is rainy” the seek bar indicator was in the middle of it’s way which I told my self : I’m going to Rasht.

The folk music, the sound of local markets , those poems, they all was like a powerful magic. The decision was made, I had to go, so I started to share the idea with my friends, a lonely trip does not seem fun (at first). The trip started to teach me lessons at the decision level. I guess there is not a better teacher than a trip. My friends who were supposed to be with me in the trip canceled the plan for their own personal reasons, I was expecting myself to cancel the trip but for a moment I thought myself, why? surprisingly I felt deeply inside I need to be alone. I should do it alone. Deep inside, human kind is alone. Most of the times we can’t see ourselves in crowd (Human loses its ego in the society and finds itself alone), I strongly believe we all need a time for nothing and nobody.

You should feel it by heart

I traveled to Rasht, Masuleh, Lahijan and Fuman. All the trip was amazing and fresh but it’s not possible to write down the beauty of it. It’s a feeling at the moment. so true, so present, so beautiful and I guess it’s the soul of travelling. That’s the reason you should be there yourself to feel it. It seems super ordinary. “I was feeling the drops of clouds on my skin.” but you can’t feel it. Use your imagination but it’s not enough. It’s impossible. You should experience it yourself. I was walking around in the pure nature, a dog started to follow me and she was playing around with joy, she was following me. I never saw a dog that happy. These words are powerless, you can’t understand the feeling I’m talking about. You should feel it and you should be there to feel it.

Rasht

Rasht is alive. That is the best description for this city. You can feel life at every corner. Food is amazing, People seem happy. Most of the people are good looking, They care about their appearance and clothes. They just live, they don’t care much about future, they buy good clothes, they eat great foods. It’s a lovely texture of everything. To be honest Rasht still is not the heaven some people try to show. You can still look around and figure out problems, poverty and government irresponsibility.

A closed cinema at Rasht

Don’t ever miss Rasht cafes, be sure you try “beens with Olive oil” for breakfast. Smell of Olive oil makes you insane and you can’t believe how delicious beans can be. Oh! remember to keep some cash in your pocket, a lot of local stores in Rasht don’t accept credit cards.

Beans with Olives oil and Olives itself 🙂

Torabi’s House

Torabi’s house is where I met Koroush and Sina. Sina is really cool, so funny and friendly. Koroush is a lovely photographer, he is an art guy. He read novel every monday and tuesday at 07:00 PM at Torabi’s house. “Where is this Torabi’s house anyway?” you may ask. I will answer : “They call it Dream House”. A historical cute house which has been saved from destruction.

Torabi’s house yard
Koroush paintings

I met lovely and cool guys at Torabi’s house. We talked about the trip and drank delicious tea together.

Masuleh

Masuleh is the nature I never believed it really exists. I was thinking it’s just in movies. In real life we can not see these forest or clouds through the trees and mountains. For me, it was a true dream. It was dreamy. I slept one night in Masuleh.

Sad part is the reality that tourism seems like a pain in the ass for the local people lives just as it helps them to earn some cash. Locals income is not from the farming or livestock. They rent their houses to the passengers. That’s how they make money. The crowd make lot’s of noise and population so locals may decide to leave and rent their houses and migrate for a relax life.

Funny story : only with 15 minutes of walking, you can be in a place with no other human being. Pure nature, It seems people just need a place to take their stupid selfies, eat some crap and leave. They don’t explore the environment. They don’t own the spirit.

Lahijan

Lahijan is a lost soul which belongs to a wise oldman. That’s how I call Lahijan. Maybe fame doesn’t just fuck humans character but also fucks cities. I couldn’t find the coziness and intimacy of Rasht in Lahijan.

I spent most of my time in Hotel, I was tired and the first night in Lahijan was frustrating. Next morning I left my room to the Sheykh Zahed Gilani Mosque, It changed everything. Tea farms was around me. Every deep breath was a gift, So refreshing.

I really encourage you to a lonely trip. You will never forget it.